在CUP中:如何使某些东西可选解析?

时间:2013-02-25 10:36:37

标签: parsing compiler-construction jflex

     PROC_DECL -> "proc" [ "ret" TYPE ] NAME
                  "(" [ PARAM_DECL { "," PARAM_DECL } ] ")"
                  "{" { DECL } { STMT } "}"

这是程序声明的语法。

你怎么说“ret”TYPE是可选的而不是多个案例?

1 个答案:

答案 0 :(得分:4)

使用另一个产品,比如ret_stmt,它可以是空的,也可以包含一个return语句,所以在.cup文件中你将有这个产品:

ret_stmt ::= // empty 
                    {: /*your action for empty return statement*/ :}
                 // Single return statement          
                 | "ret":r TYPE:t
                    {: /*your action for single return statement*/ :}

PROC_DECL ::= "proc":p ret_stmt:r NAME:n
                  "(" param_list:pl ")"
                  "{" { DECL } { STMT } "}"
                   {: /*your action for procedure declaration statement*/ :}

您可以使用类似的参数声明方法,添加生产param_list。