5

下面的代码片段可以在:http: //zaach.github.io/jison/demos/calc/以及 jison 文档页面上找到。阅读 jison、lex 和 flex 文档后——我仍然不完全理解 %lex 和 /lex 语法。它是特定于 jison 扫描仪生成器的吗?意思是它提供稍后在文档中显示的 json 输出的唯一功能?我之所以问,是因为 jison 文档没有明确解释其用途,而且 flex/lex 规则似乎不允许这种语法。

/* description: Parses end executes mathematical expressions. */

/* lexical grammar */
%lex

%%
\s+                   /* skip whitespace */
[0-9]+("."[0-9]+)?\b  return 'NUMBER';
"*"                   return '*';
"/"                   return '/';
"-"                   return '-';
"+"                   return '+';
"^"                   return '^';
"("                   return '(';
")"                   return ')';
"PI"                  return 'PI';
"E"                   return 'E';
<<EOF>>               return 'EOF';

/lex
4

1 回答 1

4

和标记%lex/lex界定属于扫描仪生成器的语法部分。%lex标记标记开始并标记/lex结束。

使用时bisonflex您会将词法分析器的定义(Jison 用语中的“扫描仪生成器”)放在一个.l文件中,并将语法放在一个.y文件中。我认为不存在使用bisonflex(或yacc/lex)组合这两个文件的方法。(我已经很久没有使用了bisonflex所以有一些我不知道的东西并非不可能。)

bison事实上,Jison 虽然从and中获得灵感flex,但它确实是一个独立的工具。bison所以它确实包含在or中没有等价物的特性flex

于 2014-05-13T12:23:12.903 回答