什么是jison中的%lex和/ lex行?

时间:2014-05-13 04:16:34

标签: jison

以下代码段可在以下位置找到: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

1 个答案:

答案 0 :(得分:4)

%lex/lex标记仅限定与扫描仪生成器相关的语法部分。 %lex标记标记开头,/lex标记结束。

使用bisonflex时,你会将词法分析器的定义(“扫描仪生成器”在Jison用语中)放在.l文件中,而语法放在.y中文件。我认为没有办法使用bisonflex(或yacc/lex)来合并这两个文件。 (自从我使用bisonflex以来已经很长一段时间了,所以我不知道有什么东西是不可能的。)

事实是,尽管Jison从bisonflex中获取灵感,但它确实是一个独立的工具。因此,它确实包含bisonflex中无效的功能。