没有空格的Jison Lex

时间:2015-08-06 18:05:37

标签: flex-lexer jison

我有这个Jison lexer和解析器:

%lex
%%

\s+              /* skip whitespace */
'D01'            return 'D01'
[xX][+-]?[0-9]+  return 'COORD'
<<EOF>>          return 'EOF'
.                return 'INVALID'

/lex

%start source
%%

source
: command EOF;

command
: D01 COORD;

它会标记并解析D01 X45但不会D01X45。我错过了什么?

1 个答案:

答案 0 :(得分:2)

与(f)lex - 或者实际上绝大多数扫描仪生成器不同,jison扫描仪不实现最长匹配规则。相反,第一个匹配模式获胜。

为了使这个功能适用于关键字,jison扫描仪还实现了简单文字字符串的限制 - 比如&#34; D01&#34; - 只有在字边界结束时才匹配。

解决方法是将带有多余括号的文字字符串模式括起来:

("D01")       { return 'D01'; }

jison wiki

中记录了这一点