如何识别jison中的重复标记?

How to recognize repetition of tokens in jison?

TL;TR

这个练习的 objective 是检测某个标记的重复,我试图用正则表达式中的 * 符号来做,但它不起作用。

问题描述

我正在做一个基本的转译器,它包括用已经定义的语法翻译某些语法。在定义多个标记的检测时,我仍然有一些缺点。也就是说,使用*来指定一个正则表达式的重复(我认为*是用来定义一个令牌的重复),例如(见SENTENCE*):

 FUNCTION
   : DEF ID PAR_OPEN PAR_CLOSE
       SENTENCE*
     END
        { $$ = 'function ' +  + '(){' +  + '}' };

  SENTENCE
    : PRINT
    | VAR_ASSIGN
    |;

语法适用于输入:

def hello() println "dsasd" end

但它不适用于条目:

def hello() a = 3 println "dsasd" end

抛出的错误是:

bash Error: Parse error on line 3: ...llo() a = 3 println "dsasd"end ---------------------^ Expecting 'EOF', '+', 'OR', 'AND', '=', '<>', '-', '*', '/', '>', '<', '>=', '<=','^', 'PAR_CLOSE', '%', 'END', got 'PRINTLN'

你能告诉我我做错了什么吗?

See Gist complete code

通过在语法中添加 %ebnf 解决。参见 here