【发布时间】:2014-04-17 09:32:10
【问题描述】:
我需要为给定的语法编写一个词法分析器和一个解析器(我需要手工制作而不是使用生成器)。我做了很多研究,但我仍然不知道如何编码。
例如我有(EBNF 中的语法):
<Letter> ::= [A-Za-z]
<IntegerLiteral> ::=<Digit> { <Digit> }
这需要在词法分析器或解析器中定义吗?怎么做?
我知道词法分析器应该逐个字符地读取文件并输出标记,然后将这些标记传递给解析器以创建解析树,但是我陷入了编码中。
【问题讨论】:
-
“我需要手工制作而不是使用发电机”:这是否会阻止您使用 boost spirit? (www.boost.org)。
-
'它是一个生成器吗?' 除了需要使用 c++ 编译器之外的任何东西。
-
如果你对这个话题感兴趣,看看其他编译器手工制作他们的东西,我想 Clang 的 Lexer 类是很好的灵感来源。
-
查看我关于如何编写递归下降解析器的 SO 答案,使用 EBNF 作为直接指导告诉您编码的内容:stackoverflow.com/questions/2245962/…
标签: c++ parsing compiler-construction lexical-analysis