以下代码段可在以下位置找到: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
答案 0 :(得分:4)
%lex
和/lex
标记仅限定与扫描仪生成器相关的语法部分。 %lex
标记标记开头,/lex
标记结束。
使用bison
和flex
时,你会将词法分析器的定义(“扫描仪生成器”在Jison用语中)放在.l
文件中,而语法放在.y
中文件。我认为没有办法使用bison
和flex
(或yacc/lex
)来合并这两个文件。 (自从我使用bison
和flex
以来已经很长一段时间了,所以我不知道有什么东西是不可能的。)
事实是,尽管Jison从bison
和flex
中获取灵感,但它确实是一个独立的工具。因此,它确实包含bison
或flex
中无效的功能。