【问题标题】:Recursive in BNF grammarBNF语法中的递归
【发布时间】:2014-06-18 01:55:13
【问题描述】:

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

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
}

【问题讨论】:

  • 不清楚您的哪些符号是令牌,哪些是非终结符。如果只有 B 和 C 是标记,那么您需要重构语法或使用比您更多的前瞻。
  • 有关如何构建递归下降解析器的详细信息,请参阅stackoverflow.com/a/2336769/120163
  • ... 或重构你的解析器。写下属于该语言的几个字符串,看看你的函数将如何处理它们。
  • 嗯。 B是代币吗?如果不是,它的规则在哪里?如果是的话……你为什么叫它B?

标签: c recursion compiler-construction bnf recursive-descent


【解决方案1】:

details on how to build a recursive descent parser 上查看我对另一个类似问题的 SO 回答。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多