4

好吧,我不确定我应该如何使用递归下降解析来编写一个函数来解析如下所示的语法。实际上,我不确定我是否做得对...

BNF:

 A : B | A '!'
 B : '[' ']'

伪代码:

f()
{
   if(tok is B) 
      parse_b();
      return somethingB
   else if(????) how will I know if it's start of A or I don't need to?
      x = f();
      parse_c();
      return somethingA
}

我正在这样做(没有检查以确定它是否是 A,但我觉得它有问题):

f()
{
   if(tok is B) 
      parse_b();
      return somethingB
   else
      x = f();
      parse_c();
      return somethingA
}
4

1 回答 1

2

有关如何构建递归下降解析器的详细信息,请参阅我对另一个类似问题的 SO 回答。

特别是它解决了解析器的结构,以及如何通过检查语法规则(包括处理列表)来推导它。

于 2014-06-21T21:49:42.887 回答