Parsing 为简单语法创建Bison文件

Parsing 为简单语法创建Bison文件,parsing,compiler-construction,grammar,bison,yacc,Parsing,Compiler Construction,Grammar,Bison,Yacc,我有以下简单语法: E -> T | ^ v . E T -> F T1 T1 -> F T1 | epsilon F -> ( E ) | v 我是野牛队的新手,所以我希望有人能教我如何用那种格式写出来。到目前为止,我只知道以下内容,但我不确定是否正确: %left '.' %left 'v' %% /* The grammar follows. */ exp: term {printf("1");} | '^' 'v'

我有以下简单语法:

E -> T | ^ v . E 
T -> F T1 
T1 -> F T1 | epsilon
F -> ( E ) | v
我是野牛队的新手,所以我希望有人能教我如何用那种格式写出来。到目前为止,我只知道以下内容,但我不确定是否正确:

 %left '.'
 %left 'v'
 %% /* The grammar follows.  */

 exp:
 term               {printf("1");}
 | '^' 'v' '.' exp  {printf("2");}
 ;

 term:
 factor term1       {printf("3");}
 ;

 term1:
 factor term1       {printf("4");}
 |                  {printf("5");}      
 ;

 factor:
 '(' exp ')'        {printf("6");}
 | 'v'              {printf("7");}
 ;
 %%

您缺少几个产品中的结束分号。源代码语法中没有任何东西表明您需要关于行的结果。

关于分号,您是对的,但我认为Bison在编译过程中为我解决了这个问题-前后的.output文件都是相同的。不过,这句台词很有道理。其他的都匹配吗?谢谢。我想知道您是否也可以告诉我是否要生成.output文件,在顶部保留%规则很重要。它们很重要,但是源语法中没有任何东西可以告诉您它们是否是左关联的。另一方面,除幂运算外,大多数运算符都是左关联的,因此这是一个很好的猜测。但对于课程作业,我会把它们排除在外,除非这样做会产生歧义,野牛会告诉你。它们是用于解引用和记录成员身份的Pascal运算符吗?我在问题中没有指定它,但这是lambda演算的语法,其中一个要求是“v”是左关联的,并且绑定比“.”更紧密。老实说,我对术语“绑定比”有点困惑,但我认为这意味着它具有更高的优先级。在这种情况下,源语法是错误的,因为它给了它们相同的优先级。先解决这个问题。不要混淆关联性和优先级。