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



下面的代码片段可以在:http://zaach.github.io/jison/demos/calc/和jison文档页面上找到。在阅读了jison、lex和flex文档之后,我仍然不能完全理解%lex和/lex语法。是监狱扫描仪发生器特有的吗?意思是它的唯一功能是提供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

%lex/lex标记只分隔属于扫描器生成器的语法部分。%lex标志开始,/lex标志结束。

当使用bisonflex时,您将词法分析器的定义(Jison术语中的"扫描仪生成器")放在.l文件中,并将语法放在.y文件中。我不认为有一种方法使用bisonflex(或yacc/lex)来组合这两个文件。(我已经很长时间没有使用bisonflex了,所以不可能有什么我不知道的。)

事实是,尽管Jison的灵感来自bisonflex,但它实际上是一个独立的工具。因此,它确实包含了bisonflex中没有对应的功能。

相关内容

  • 没有找到相关文章

最新更新