语法的语义模型

时间:2016-03-23 09:24:08

标签: grammar antlr4 semantics dsl

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

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

到目前为止,我已经弄明白了,鉴于grammar是绝对可取的,这些分离概念。

但是,我不太明白该怎么做。例如,鉴于这种轻微的语法,您如何构建Domain ObjectSemantic Model

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

大多数书都提出了这种方法,以便通过AST。你不必直接翻译,而是先创建一个语义模型,然后连接到它一个解释器。

示例(SQL语法树):

我创建了一个语义模型,而不是直接生成一个SQL语句,然后我能够连接一个将这个语义模型转换为SQL语句的解释器。

Abstract Systex Tree -> Semantic Model -> Interpreter

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

1 个答案:

答案 0 :(得分:1)

术语"域对象"和#34;语义模型"不是编译器文献中的标准术语,因此您可以获得大量随机答案。

与解析相关的常用术语是"具体的语法树" (匹配语法规则的形状),"抽象语法树" (尝试制作一个包含较少意外细节的树although it might not be worth the trouble.)。

Parsing is only a small part of the problem of processing a language。你需要大量语法的语义解释,但是你代表它(AST,CST,...)。这包括以下概念:

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

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

我最接近"语义模型"是高级代码生成。这需要很多机器,你必须建立在树顶。

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