c - 语法符号属性在 C 中的实现

标签 c compiler-construction compiler-theory

我需要实现编译器(词法、语法和语义分析器)。 我已经实现了来自flex++的词汇,来自手工的语法(递归下降), 并知道我正在研究语义(向现有解析器添加语义规则)。 我的问题是 - 如何实现属性。 例如,对于生产:

TYPE -> integer

我需要添加语义规则:

TYPE.type = integer

所以这里我需要为 TYPE 创建一些结构,等等为所有语法符号。 那么我如何实现该结构呢?我是否需要为每个语法符号创建一些结构,并且它需要在文件范围内是全局的?

附:也许这不是最好的编译器实现,它只是赋值的要求。

最佳答案

如果为您的语言中的每个终结符和非终结符定义一个类型(通常是结构体),这是最简单的。然后,每次使用(非)终端都可以访问该类型,并且每次属性分配都会违反与(非)终端关联的结构中的相应槽。

我建议您在语法标记之后命名您的实现结构。因此,T 的属性结构的类型将是“T_attributes { ... }”

对于您的示例,“type”将是 T_attributes 中的一个槽。也许你想在摘要中写的是:

TYPE -> 'integer' ;  -- 'integer is a keyword'
TYPE.type = "int";   -- the type of an 'integer' is "int"

假设您是手动执行此操作,您将手动编译属性分配以在树遍历命中 TYPE 节点时执行。

关于c - 语法符号属性在 C 中的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9677055/

相关文章:

c# - 如何在C#中实现按名称调用?

c# - 显式空检查与空合并运算符的编译器评估?

C内存映射

c++ - 从另一个编译器导出的 DLL 加载类

c - 如何根据 C11 使用二进制前缀?

recursion - 将 "almost tail position"中的递归调用移动到真正的尾部位置

c - 在 C 中处理 ASCII 字母

python - 从 Python 文件调用 C 函数。使用Setup.py文件时出现错误

c - 在链表中插入和删除节点

compiler-construction - 在Visual Studio 2013中写入输出构建 Pane +错误列表,无需双击即可使用msbuild/new进程双击条目以出错