0

我有以下 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)

总而言之,它将函数解析为约束的一部分,但不是单独解析。它应该解析它们。

谁能指出为什么?

4

1 回答 1

1

你应该entrypoints正确设置你的。

当您x # fun(Y)成功解析时,我假设您已将您设置entrypointsConstraint并使用生成的pConstraint函数来解析您的表达式。然后,您可以将规则更改Constraint

ConNoVar. Constraint ::= Term ;
ConFr.    Constraint ::= Var "#" Term ;

或者,您可以添加Term到您的entrypoints并调用pTerm来解析您的函数术语。

于 2020-07-02T02:49:03.783 回答