Compiler construction 编译器语义分析的形式化方法

Compiler construction 编译器语义分析的形式化方法,compiler-construction,semantics,context-sensitive-grammar,Compiler Construction,Semantics,Context Sensitive Grammar,我知道有一种称为属性语法的形式主义和一种称为语法导向翻译的非形式主义方法,但前者效率低下,后者难以自动化 最近关于语义分析是否还存在其他形式主义?OP认为“属性语法”效率低下,语法导向的翻译很难自动化。我提供了一个证明点,在下面列出一些其他语义系统,并建议如何集成它们 我们支持这两项活动以及更多活动 它为完整的上下文无关语法提供了解析器,并且能够使用任意数据和操作以及语法节点间的任意流以并行属性语法定义、编译和执行。人们可以计算度量,构建符号表,或者使用这些属性语法计算语义分析 给定(DMS)语

我知道有一种称为属性语法的形式主义和一种称为语法导向翻译的非形式主义方法,但前者效率低下,后者难以自动化

最近关于语义分析是否还存在其他形式主义?

OP认为“属性语法”效率低下,语法导向的翻译很难自动化。我提供了一个证明点,在下面列出一些其他语义系统,并建议如何集成它们

我们支持这两项活动以及更多活动

它为完整的上下文无关语法提供了解析器,并且能够使用任意数据和操作以及语法节点间的任意流以并行属性语法定义、编译和执行。人们可以计算度量,构建符号表,或者使用这些属性语法计算语义分析

给定(DMS)语法规则:

  LHS = RHS1 ... RHSN ;
<<Denotation>>: {
     exp2.env = augment_environment(exp.env,
                                    new_variable_and_value_pair(name(ID.),
                                                                exp1.value));
     exp.value=exp2.value;
               }
您可以为命名属性语法计算过程1编写DMS属性语法规则(出于实际原因,可以有许多不同的过程,有些过程甚至可以构建彼此的结果),格式如下:

  <<Pass1>>:  {  LHS.propertyI=fn1(RHSx.propertyY,...);
                 ...
                 RHSa.propertyB=fn2(RHSp.propertyQ,...);
                 ...
              }
 rule rule_name(parameter1:syntax_category1, ... parameterN...)
   :  source_syntax_category -> target_syntax_category
   "  <text in source language>  "
  ->
   "  <text in target language> "
  if  condition_of_matched_source_pattern;
可以编写属性语法规则:

  LHS = RHS1 ... RHSN ;
<<Denotation>>: {
     exp2.env = augment_environment(exp.env,
                                    new_variable_and_value_pair(name(ID.),
                                                                exp1.value));
     exp.value=exp2.value;
               }
更具“语义”的(以上纯语法)检查的泛化将是

它假设自定义谓词参考其他DMS可派生结果,以确定实例化条件在找到它的点处始终为真(匹配的树c携带其源位置,因此上下文是隐含的)。您可以为所需的语言构建控制和数据流,并使用生成的数据流来确定到达条件c的值,然后以一种非平凡的方式证明该值是“真”的

我假设DMS定义的支持谓词“can_determinate_if_true”。这只是一点定制的PARLANSE代码

但是,由于重写将一棵树转换为另一棵树,因此可以对整个树重复应用任意长/复杂的转换规则集。这使DMS重写具有Post(字符串[广义到树])重写系统的能力,因此具有图灵功能。从技术上讲,您可以使用足够的变换生成原始树的任意变换。通常使用DMS的其他特性来简化转换的编写;例如,重写规则可以参考特定属性语法计算的结果,以便“轻松”使用来自“树中远处”的信息(单个重写规则始终具有固定的最大“半径”)

DMS提供了许多额外的支持机制,以帮助构建控制流图和/或使用高效的并行求解器计算数据流。DMS还为各种语言提供了广泛的前端,如C、C++14、Java1.8、IBM企业COBOL等等。。。这样,工具工程师就可以专注于构建自己想要的工具,而不是从头开始构建解析器(只为了发现自己必须活着)

如果OP对另一种(结构化操作)语义学风格的最新概述感兴趣,他可能会查阅课程笔记。我们声称,如果愿意,这些论文中的技术可以在DMS之上实现


你可以列出一长串实现这些想法的各种学术工具。它们大多是研究工具,并不成熟。一个这样的研究系统是属性语法评估系统,我听说它在能力和性能方面都很突出,但我没有具体的经验。

这个问题似乎离题了,因为它不是一个实用的、可回答的问题。类似的模糊和抽象的问题可能会在网站上得到一些关注,我继续被一些人的反应所震惊,这些人坚持要结束问题,因为他们碰巧不知道答案。在所有可能提出的问题中,关于“形式语义学”的问题最不可能含糊不清。而且,为程序计算这种语义的问题是一个完全有效的“编程问题”;OP显然希望有效地计算它们。我对这个问题提供了一个切实可行的答案here@IraBaxter更糟糕的是,他们没有足够的知识来理解这个问题。几周前,有人问到“暖化服务器”,这是任何运行高流量网络农场的人都非常关心的问题。不仅问题结束了,OP还遭到嘲笑,直到他在任何一个知识渊博的人都无法回答之前删除了这个问题answer@PanagiotisKanavos当前位置我在解释接近者的理由时很有礼貌。@IraBaxter在这个问题上我不是一个接近的选民,但我不同意。可能有一些产品可以做到这一点,但如果它们构成了一个答案,那么问题一定是对非现场资源的请求:否则就太广泛了。作为79年UCSC编译器建设的校友发言。这一切的原始问题的答案在哪里?为什么不应该将其标记为垃圾邮件?这不是复制粘贴,10%的句子似乎回答了问题,但它们分布在各地。是否还有其他形式主义?如果是,它是如何被调用的,它做了什么?OP通过反对两种现有的样式打开;我表明,他的反对并不像他所说的那样是个问题。我讨论了其他语义风格[当然,简短地说]以及它们如何适应。当我写更一般的答案(没有“编程代码”的例子)时,人们反对这样的答案不符合SO的精神。我本可以不举这些例子。试着突出显示你这样做的句子,然后检查有多少文字本质上是关于某个产品的广告。最后一段指向一篇文章,但没有具体说明细节,第三段说“低效”在现实生活场景中是不正确的。其余的都是关于产品的,而不是问题。其中大部分都提供了证据
  ...
  if can_determine_is_true(c);