如果那么在ocamlyacc

时间:2013-07-07 17:46:04

标签: ocaml yacc ocamlyacc

任何人都可以向我们介绍如何在Ocamlyacc中实现。我已经从词法分析器(ocamllex)定义了令牌,即IF,THEN,ELSE。对于if语句,我已经定义了标记:GREATERTHAN,LESSERTHAN,EQUALTO for integers。我搜索了许多教程,但无济于事!

更新:

我想解释结果并返回由if-else语句指定的表达式的值。

2 个答案:

答案 0 :(得分:3)

您必须定义规则:

ifthenelse :    
 |   IF condition THEN statement ELSE statement   { IfThenElse($1,$2,$3) }


condition :    
| INT EQUALTO INT  { Cond(EqualTo,$1,$3) }   
| INT LESSERTHAN INT {  Cond(LesserThan,$1,$3) }   
| INT GREATERTHAN INT {  Cond(GeaterThan,$1,$3) }

不要忘记在你的lex fil中定义int的正则表达式

答案 1 :(得分:0)

也许你已经看过了,但OCaml手册提供了一个完整的ocamllex / ocamlyacc示例来计算表达式的值:Desk Calculator Example

该示例显示,如果您愿意,可以在ocamlyacc操作中计算结果。举一个简单的例子,它并不难以理解。在更现实的情况下,您可能希望构造一个抽象语法树以供以后处理(例如评估)。代码具有类似的风格,除了案例由AST类型的不同构造函数给出,而不是由不同的语法规则给出。