我需要实现编译器(词法、语法和语义分析器)。 我已经实现了来自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/