gpt4 book ai didi

c++ - 来自 EBNF 的 C++ 中的词法分析器和解析器

转载 作者:行者123 更新时间:2023-11-30 04:05:49 24 4
gpt4 key购买 nike

我需要为给定的语法编写一个词法分析器和一个解析器(我需要手工制作它,而不是使用生成器)。我做了很多研究,但我仍然不知道如何编码。

例如我有(EBNF 中的语法):

<Letter> ::= [A-Za-z]

<IntegerLiteral> ::=<Digit> { <Digit> }

这是否需要在词法分析器或解析器中定义?以及如何?

我知道词法分析器应该逐个字符地读取文件并输出标记,然后将这些标记传递给解析器以创建解析树,但是我在编码中遇到了困难。

最佳答案

您向我们展示的内容看起来像是定义了 token 类型。所以它进入词法分析器。

编写词法分析器的诀窍就是获取您的输入文本(它只是一长串单独的字符)并一个接一个地查看它们。每次查看字符时,根据上面的 EBNF 对其进行分类(即它是 Letter 还是 IntegerLiteral),然后生成相应的标记。

现在你上面的语法听起来很无意义(它生成单字符和单数字标记)所以我猜你有更多像这样的规则使用这些规则使定义更具可读性。因此,实现那些更复杂的规则。编写一个函数来检测一个字符是否匹配其中一个子规则。

每当您发现当前字符与前一个字符的类型不匹配时,完成当前字符并开始一个新字符。

这就是它的全部内容。您只需要一堆 bool 值来跟踪类型。

关于c++ - 来自 EBNF 的 C++ 中的词法分析器和解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23129448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com