没有空格的 Jison Lex

Jison Lex without white spaces

我有这个 Jison 词法分析器和解析器:

%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。我错过了什么?

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

为了使这项工作适用于关键字,jison 扫描器还实施了限制,即简单的文字字符串(如 "D01")仅在以单词边界结尾时才匹配。

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

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

这记录在 jison wiki