如果在ocamlyacc中有其他

如果在ocamlyacc中有其他,ocaml,yacc,ocamlyacc,Ocaml,Yacc,Ocamlyacc,谁能简单介绍一下我如何在Ocamlyacc中实现if-then-else。我已经从词法分析器(ocamlex)中定义了标记,即IF、THEN、ELSE。对于if语句,我定义了标记:GREATERTHAN、LESSERTHAN、EQUALTO表示整数。我已经搜索了很多教程,但都没有用 更新: 我想解释结果并返回if-else语句指定的表达式值。您必须定义规则: ifthenelse : | IF condition THEN statement ELSE statement {

谁能简单介绍一下我如何在Ocamlyacc中实现if-then-else。我已经从词法分析器(ocamlex)中定义了标记,即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手册提供了一个完整的OCAMLEX/ocamlyacc示例,用于计算表达式的值:


该示例显示,如果需要,可以在ocamlyacc操作中计算结果。举个简单的例子,这一点也不难理解。在更现实的情况下,您可能希望构造一个抽象语法树以供以后处理(例如求值)。代码有相似的风格,只是大小写是由AST类型的不同构造函数而不是由不同的语法规则给出的。

如果没有,请为我定义函数,好吗?提前谢谢!这只是您定义的一种类型:Cond of op*int*int等。我可以像解释器一样使用Ocaml来计算它吗?您可以很容易地为抽象语法编写解释器,但它不是免费的。@JeffreyScofield:我想这需要我编写一个函数,从ocamlyacc获取输入并执行所需的操作。