没有空格的 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
我有这个 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