【问题标题】:Multiline comments in a recursive descent parser递归下降解析器中的多行注释
【发布时间】:2023-11-21 06:45:01
【问题描述】:

我正试图围绕如何使用递归下降解析器处理 C 风格的多行 cmets (/* */)。因为这些 cmets 可以出现在任何地方,你如何解释它们?例如,假设您正在将一个句子解析为word 标记,如果单词中有注释,我们该怎么办?

例如。

这是一个句子=wordwordwordword

这是一个明智的/*sible*/tence = ???

谢谢!

【问题讨论】:

  • 你先写了一个词法分析器/分词器吗?在将程序文本分解为标记时,您可以忽略 /**/ 之间的任何内容。

标签: parsing peg recursive-descent


【解决方案1】:

在 C 中,就像其他所有编程语言一样,注释实际上是空格;注释不能出现在令牌中。

所以 cmets 不能中断对令牌的解析,因此只需要被识别和忽略。

【讨论】:

  • 所以如果我还想跟踪 cmets 以及它们在文本中的位置,我是否应该在文本中进行两次遍历?一个忽略 cmets,另一个只寻找 cmets?
  • @JohnWonderick 您可以单独列出 cmets 所在的位置,而无需再次通过。但是 cmets 确实与解析无关。如果您正在尝试构建漂亮的打印机或类似的东西,您可能会在标记化时创建标记的链接列表/向量,但仅使用有意义的标记进行解析。
  • 谢谢,有道理。
最近更新 更多