语法中的语义模型



我想问一下关于概念的一些想法:Domain ObjectSemantic Model

所以,我真的很想了解什么是Domain Object / Semantic Model,什么不是Domain Object / Semantic Model

据我所知,在给定grammar的情况下,做这些分离概念是绝对可取的。

然而,我不太清楚如何做到这一点。例如,给定这个轻微的语法,你如何构建Domain ObjectSemantic Model

这正是我想弄清楚的。。。

大多数书籍都建议采用这种方法来进行AST。你不需要同时直接翻译,而是通过AST创建一个语义模型,然后通过解释器连接到它。

示例(SQL语法树):

我没有直接生成SQL语句,而是创建了一个语义模型,然后我就可以连接一个解释器,将这个语义模型翻译成SQL语句。

Abstract Systex Tree -> Semantic Model -> Interpreter

通过这种方式,我可以拥有一个Transact-SQL解释器和另一个用于SqLite的onr。

术语"域对象"one_answers"语义模型"并不是编译器文献中真正的标准术语,因此您会得到很多随机答案。

与解析相关的常用术语有"具体语法树"(与语法规则的形状相匹配)、"抽象语法树"

解析只是处理语言问题的一小部分。你需要对语法进行大量的语义解释,无论你如何表示它(AST、CST…)

  • 名称解析(对于每个标识符,在哪里定义?使用
  • 类型解析(对于每个标识符/表达式/语法构造,该实体的类型是什么
  • 类型检查(该语法构造是否以有效的方式使用?)
  • 控制流分析(程序部分的执行顺序是什么,甚至可能是并行/动态/约束确定的)
  • 数据流分析(值在哪里定义?消耗?)
  • 优化(用另一个语义等价的集合替换一组语法结构,该集合具有一些不错的属性[编译后执行速度更快是常见的]),在高或低抽象级别
  • 高级代码生成,例如,将语言中的句法结构集解释为目标[通常是汇编语言]语言中的等效集

这些概念中的每一个都或多或少地建立在前面的概念之上。

最接近"语义模型"的是高级代码生成。这需要在树上建造大量的机器。

ANTLR解析。你必须做/提供其余的。

最新更新