繁体   English   中英

如何识别jison中令牌的重复?

[英]How to recognize repetition of tokens in jison?

TL; TR

本练习的目的是检测某个令牌的重复,我正尝试使用正则表达式中的*符号来实现此目的,但是它不起作用。

问题描述

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

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

  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'

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

请参阅Gist完整代码

通过在语法中添加%ebnf来解决。 这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM