-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
要把bnf解析为jsbison能使用的json格式的上下文无关文法。。
如:
%start expr
%%
expr
: expr '+' term
{
this.$$ = $1 + $2;
}
| term
{
this.$$ = $1;
}
;
term
: term '*' factoy
{
this.$$ = $1 * $2;
}
| factoy
{
this.$$ = $1;
}
;
factoy
: NUMBER
{
this.$$ = parseInt($1, 10);
}
| '(' expr ')'
{
this.$$ = $2;
}
;
转换为:
{
tokens: '+ * ( ) NUMBER',
start: 'expr',
bnf: {
'expr': {
'expr + term': 'this.$$ = $1 + $3',
'term': 'this.$$ = $1'
},
'term': {
'term * factor': 'this.$$ = $1 * $3',
'factor': 'this.$$ = $1'
},
'factor': {
'NUMBER': 'this.$$ = parseInt($1, 10)',
'( expr )': 'this.$$ = $2'
}
}
}jsbison的bnf2cfg,所能解析的bnf文件中支持的功能:
| 功能 | 完成度 |
|---|---|
| 声明token: %token | ok |
| 声明结合性与优先级 %left %right %nonassoc | ok |
| 声明开始符号: %start | ok |
| 未声明开始符号时,自动使用首个定义的产生式的lhs为开始符号 | 不支持,必须定义%start |
| 应用产生式归约为非终结符时的语义动作 | ok |
| 语义动作中引用各符号值 $1 $2 $n | ok |
| 语义动作中定义归约后的非终结符的值 this.$$ | ok |
Metadata
Metadata
Assignees
Labels
No labels