c - 我如何实现解析?

标签 c parsing compiler-construction

我正在用 C 设计一个编译器。我想知道我应该使用哪种技术,自上而下还是自下而上?我只使用自下而上实现了运算符优先级。我已经应用了以下内容 规则:

E:=E+E
E:=E-E
E:=E/E
E:=E*E
E:=E^E

我想知道我是否马上出发? 如果我想包含if-else、循环、数组、函数,是否需要实现解析? 如果是,我该如何实现?任何人都行 我只实现了 token 收集和运算符优先级。接下来的步骤是什么?

最佳答案

Lex & Yacc是你的答案。或者 Flex 和 Bison,它们是原始工具的分支版本。

它们是免费的,它们是用 C 语言编写词法分析器和解析器的真正标准,并且无处不在。

此外,O'Reilly 发布了一个 300 页的小珍珠:Flex & Bison .我买了它,它确实向您解释了如何为一种编程语言编写一个好的解析器并处理所有细微的事情(错误恢复、冲突、范围等)。它还会回答您有关如何解析表达式的问题:您的方法适用于自上而下的解析器,但您会发现这不足以处理运算符优先级。

当然,出于业余爱好,您可以编写自己的词法分析器和解析器,但这只是一种学术努力,很好地理解 FSM 和解析器的工作原理,但没有那么多乐趣:)

相反,如果您对编程语言设计或复杂实现感兴趣,我推荐这本书:Programming Language Pragmatics因为 Dragon Book 而不是那么出名但它真正解释了为什么以及如何在编译器中实现各种特性。 Dragon Book 也是一本圣经,它将涵盖真正底层的如何编写解析器..但它会有点无聊,我警告你..

关于c - 我如何实现解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4126574/

相关文章:

python - 如何将 python 比较 ast 节点转换为 c?

c - 当在条件操作中使用移位操作时,while 循环变为无限

ios - 解析文本,但保留标点符号

C++编译困惑

ios - 如何使用Query.limit和Query.skip?

c++ - 段错误 C++ 转换问题

assembly - 自修改代码算法

c - 逐字读取文件并输出空格

c - 嵌入式c和8051微 Controller

c - 在C中初始化字符指针数组