建议编写一个读取CFG并删除左递归的Parser

时间:2012-02-06 02:46:55

标签: c parsing grammar lex

我需要一些关于编写一个接受CFG并删除左递归的解析器(使用C和Lex)的建议。由于解析器需要接受任何字符串和语法,我对如何启动一无所知。虽然我熟悉删除左递归的算法(如上所述here,但我对如何启动无能为力,以及涉及的数据结构是什么。存储语法的最佳方法是什么,以及字符串我怎样才能有效地应用算法。请建议。(由于这是作业,请不要为我提供代码,而不是任何其他帮助/伪代码):))

1 个答案:

答案 0 :(得分:1)

  1. 您需要定义一个描述语法的语法P.这应该很容易。
  2. 你需要为P构建一个解析器。它不需要复杂,因为P不会复杂。相信我。您可以使用此方法手动编写递归下降解析器:https://stackoverflow.com/a/2336769/120163
  3. 当P解析时,它会构建一个表示语法的数据结构。 对于每个规则,这样的数据结构需要记录其左侧,长度以及构成规则主体的标记。
  4. 此时,您已经收集了数据结构中的规则,现在您需要通过调整规则来应用左递归算法。
  5. 最后你需要打印出规则;它们应该重新出现在您为P。
  6. 选择的语法中