if then else in ocamlyacc



有人能简要介绍一下我如何在Ocamlycc中实现if-then-else吗。我已经从词法分析器(ocamllex)中定义了标记,即IF、THEN、ELSE。对于if语句,我定义了标记:GREATERTHAN、LESSERTHAN、EQUALTO表示整数。我搜索了很多教程,但都没有用!

更新:

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

您必须定义规则:

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定义正则表达式

也许您已经看到了,但OCaml手册提供了一个完整的ocamllex/ocamlyacc示例,用于计算表达式的值:Desk Calculator示例。

这个例子表明,如果你愿意,你可以在ocamlyacc操作中计算你的结果。对于一个简单的例子,它一点也不难理解。在更现实的情况下,您可能希望构建一个抽象的语法树以供稍后处理(例如评估)。代码具有类似的风格,只是大小写是由AST类型的不同构造函数而不是由不同的语法规则给出的。

最新更新