本文介绍了在CUP中:如何使某些内容可选以进行解析?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

这是过程声明的语法.

您怎么说"ret" TYPE是可选的,而不会出现多种情况?

How do you say that the "ret" TYPE is optional without making multiple cases?

推荐答案

使用另一个生产,例如ret_stmt,它可以为空或包含单个return语句,因此在您的.cup文件中将具有以下生产:

Use another production, say ret_stmt, which can be either empty or contain a single return statement so in your .cup file you will have this productions:

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.

You can use a similar approach with parameters declaration, adding the production param_list.

这篇关于在CUP中:如何使某些内容可选以进行解析?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-16 21:06