1

プログラミング言語に配列のサポートを追加しようとしていますが、問題が発生しています

Array
  : '[' Expr ("," Expr)* ']'
     {{ $$  = ['ArrayList', $1]; }}
  | '[' Expr ']'
     {{ $$ = ['Array', $2]; }}
  | '[' ']'
     {{ $$ = ['Empty']; }}
  ;

ただし、これは「[1,2,3,4]」を解析しません。Jison は、"]" を期待しているのに "," になったと教えてくれました。何か案は?

4

2 に答える 2

3

再帰は解釈または拒否されません。機能させるには、2 つの要素に分割する必要があります。

Array
  : '[' Element ']'
     {{ $$  = ['ArrayList', $2]; }}
  ;

Element
  : Element "," Expr
     {{ $$ = $1 + ',' + $3 }}
  | Expr
     {{ $$ = $1 }};

これは、期待どおりに配列を返します。

["ArrayList","1,2,3,4"]
于 2015-02-14T03:21:38.547 に答える
1

jisonEBNF は受け付けません。(明らかに、それも拒否しません。)したがって、ルールは次のとおりです。

Array
  : '[' Expr ("," Expr)* ']'

次のように解釈されます。

Array
  : '[' Expr "," Expr ']'

ExprList プロダクションを作成する必要があります。

Array   : '[' ExprList ']'
        | '[' ']'
        ;
ExprList: Expr
        | ExprList ',' Expr
        ;
于 2015-02-14T03:06:20.010 に答える