c - BNF 文法中的递归

标签 c recursion compiler-construction bnf recursive-descent

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

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
}

最佳答案

请参阅我在 details on how to build a recursive descent parser 上对另一个类似问题的回答.

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

关于c - BNF 文法中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24275952/

相关文章:

c - 如何使用给定的数组制作新数组?

使用gcc在C中将float转换为unsigned int

递归计算从(0,0)到(x,y)的格子路径数

java - 多次导入库需要什么

从另一个 C 文件调用函数

c++ - 你如何在 c 中交换结构数组的元素?

c++ - "ANSI C"或 "ANSI C++"在今天还有意义吗?

python - 这种组合算法的时间复杂度

haskell - 如何计算这个 Haskell 函数中发生了多少递归调用?

c++ - 具有默认构造函数的对象的初始化列表