我正在考虑为它编写一种语言和编译器作为一个夏季项目,并且很难找到有关如何使用解析树或 BNF/EBNF 来编写编译器的信息。总体目标是编写一个编译器,将简化的函数式语言语法解析为 c。我目前正计划用 c 语言编写这个编译器,但如果有人认为这会是一个更好的主意,我不介意用其他东西来做。(虽然我确实想手动完成,但不使用 LEX 之类的工具)
例如,如果我想创建语言ADD
并将其语法定义为(+ 3 4)
,则很容易为其生成 EBNF:
Program -> {Function}
Function -> Operator Integer Integer
Operator -> +
Integer -> Digit {Digit}
Digit -> 0|1|2|3|4|5|6|7|8|9
并且更容易制作解析树:
Function
|
-------------------
| | |
Operator Integer Integer
但是你会怎么做:
- 在 C 中表示 EBNF 或解析树
- 使用此数据获取有效的 C 代码
我觉得如果我能看到一个非常简单的工作示例,就足以让我朝着正确的方向开始。我有一种感觉,你们中的许多人会建议我阅读Dragon Book
(似乎是编译器的标准资源),所以我想让您知道它已经订购并发货。
预先感谢您对此提供的任何启示!
-维京绵羊人