我有以下BNFC代码:
GFDefC. GoalForm ::= Constraint ;
GFDefT. GoalForm ::= True ;
GFDefA. GoalForm ::= GoalForm "," GoalForm ;
GFDefO. GoalForm ::= GoalForm ";" GoalForm ;
ConFr. Constraint ::= Var "#" Term ;
TVar. Term ::= UnVar;
TFun. Term ::= Fun ;
FDef. Fun ::= FunId "(" [Arg] ")" ;
ADecl. Arg ::= Term ;
separator Arg "," ;
...但是,不会分析以下内容
fun(X)
当它解析下面的代码时
x # fun(Y)
因此,总而言之,它将函数解析为约束的一部分,而不是单独解析。它应该会同时解析这两个参数。
有谁能指出原因吗?
发布于 2020-07-02 10:49:04
你应该正确设置你的entrypoints。
在成功解析x # fun(Y)时,我假设您已经将entrypoints设置为Constraint,并使用生成的pConstraint函数解析表达式。然后,您可以将Constraint的规则更改为
ConNoVar. Constraint ::= Term ;
ConFr. Constraint ::= Var "#" Term ;或者,您可以在entrypoints中添加Term并调用pTerm来解析您的函数项。
https://stackoverflow.com/questions/62551664
复制相似问题