如何使用 tokenStream 从语法中识别下一个可能的节点?
how to identify the next possible node from grammar using tokenStream?
我正在创建一个像大多数 IDE 一样具有智能感知的文本区域。我的做法是使用earley parser算法。
我正在使用 early-parser-js library。
语法如下:
S -> NP VP
VP -> VP PP | V NP | V
PP -> P NP
NP -> Det N | N | Pn | Det A N | A NP
A -> Adv A | A A
Adv -> too | very | quite
Pn -> she | he
A -> fresh | tasty | silver
N -> fish | fork | apple
V -> eats
Det -> a | an | the
P -> with
现在,如果我在 textarea 中写 "she",我的代码应该建议下一个可能的节点,例如 "eats"、"fish"、"fork" 等
我使用下面的代码实现了这个
var results = [];
var lastColumn = this.chart.length -1 ;
for(var j in this.chart[lastColumn])
{
if(!this.chart[lastColumn][j].expectedNonTerminal(grammar))
{
results.push(this.chart[lastColumn][j].rhs.toString());
}
}
return results;
我正在创建一个像大多数 IDE 一样具有智能感知的文本区域。我的做法是使用earley parser算法。
我正在使用 early-parser-js library。
语法如下:
S -> NP VP
VP -> VP PP | V NP | V
PP -> P NP
NP -> Det N | N | Pn | Det A N | A NP
A -> Adv A | A A
Adv -> too | very | quite
Pn -> she | he
A -> fresh | tasty | silver
N -> fish | fork | apple
V -> eats
Det -> a | an | the
P -> with
现在,如果我在 textarea 中写 "she",我的代码应该建议下一个可能的节点,例如 "eats"、"fish"、"fork" 等
我使用下面的代码实现了这个
var results = [];
var lastColumn = this.chart.length -1 ;
for(var j in this.chart[lastColumn])
{
if(!this.chart[lastColumn][j].expectedNonTerminal(grammar))
{
results.push(this.chart[lastColumn][j].rhs.toString());
}
}
return results;