下面的代码片段可以在: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发布于 2014-05-13 12:23:12
%lex和/lex标记仅限定与扫描器生成器相关的语法部分。%lex标记标记开始,/lex标记标记结束。
在使用bison和flex时,您会将lexer的定义( Jison术语中的“扫描器生成器”)放在.l文件中,语法放在.y文件中。我认为不存在使用bison和flex (或yacc/lex)组合这两个文件的方法。(我已经很久没有使用bison和flex了,所以有些事情我不知道并不是不可能的。)
事实是,尽管Jison从bison和flex获得了灵感,但它实际上是一个独立的工具。因此,它确实包含了在bison或flex中没有同等功能的特性。
https://stackoverflow.com/questions/23622705
复制相似问题