【问题标题】:Grammar symbol attributes implementation in CC中的语法符号属性实现
【发布时间】:2012-03-13 01:12:40
【问题描述】:

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

TYPE -> integer

我需要添加语义规则:

TYPE.type = integer

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

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

【问题讨论】:

    标签: c compiler-construction compiler-theory


    【解决方案1】:

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

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

    对于您的示例,“类型”将是 T_attributes 中的一个插槽。您在摘要中的意思大概是:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多