【发布时间】:2012-03-09 02:22:11
【问题描述】:
我有一个解析多项式表达式的有效语法(用 lex 和 bison 编写)。它就像您的标准、教科书式计算器一样的语法。这是语法的一个非常简化的版本:
Expr
: DOUBLE {$$ = newConstExpr($1);}
| Expr '+' Expr {$$ = newBinaryExpr('+', $1, $2);}
| Expr '*' Expr {$$ = NewBinaryExpr('*', $1, $2);}
| '(' Expr ')' {$$ = $2;}
;
我的问题是 Lex 为 yyin 使用 FILE*,我需要解析来自 C++ istream 的输入。我知道 flex++ 可以生成 FlexLexer 类(它可以在其构造中采用 istream),但很难让它与 Bison 啮合,甚至作者自己声称(在生成的词法分析器文件中的 cmets 中)它有问题。
所以我想知道是否有人知道使用带有 C++ istream 对象而不是 FILE* 作为输入的 flex 扫描器和野牛解析器的好方法。
【问题讨论】: