0

我想为解析语句编写yacc语法如下

START  
statement1
statement2  
END  
START
statement3
END
START
statement4
END

或者

START
  statement1
  statement2
  XYZ               (2)
      START
      statement3
      statement4
      XYZ           (1)
      END
  statement5
  XYZ               (3)
END

等等..

可以有任意数量的此类 START-END 集。

每个 START 都应该有一个 END。如果 XYZ 出现在 (1) 处,那么它也应该出现在 (2) 和 (3) 处。但是,如果 XYZ 出现在 (2) 和 (3) 它可能出现也可能不出现在 (1)。这意味着最里面的 START-END 集可能有也可能没有 XYZ .. 我应该如何编写这样的语法图案?

4

1 回答 1

1

用这个:

程序 -> S

S -> S 开始语句 END | ;

语句 -> 语句语句 | ;

语句 -> 正常语句 | XYZ ;

现在只需使用计数器来确保语法中的 XYZ 存在模式。您可以在 yacc 文件的前面检查它,END您可能知道如何检查它。

于 2013-06-23T06:46:29.053 回答