Operational Semantics with Hierarchical Abstract Syntax Graphs
这是一个激励教程介绍了语义分析的程序设计语言使用图形语言作为表示的条款,和图形改写作为表示的减少规则。我们展示了如何图形化语言自动结合所需的功能,如阿尔法等价,以及它如何可以描述纯计算,命令式存储,并在一个统一的框架控制功能。图语义结合了结构操作语义和抽象机器的一些最好的特性,同时提供了强大的新方法来推理上下文等价。所有技术细节都可以在Muroya和作者的扩展技术报告以及Muroya的博士论文中找到。
2021-02-04 cs.PL
Extended Abstract: Towards a Performance Comparison of Syntax and Type-Directed NbE
本文旨在开发一个平台,直接比较依赖类型检查器中语法指导与类型指导的相等性检查方法,量化后者的性能开销并分析改进途径。
2025-09-16 cs.PL
Abstract clones for abstract syntax
本文提出用带额外代数结构的 abstract clones 公理化简单类型理论的二阶变量绑定算子,构造自由代数并导出归纳原理,从而支持独立于语法的可靠性与规范化证明。
2021-05-03 cs.LO cs.PL
Syntax and Semantics of Abstract Binding Trees
本文的贡献是多排序名义抽象绑定树(abts)的语法和语义的发展,二阶泛代数的扩展,以支持符号索引家庭的运营商。名词性abts对于正确处理具有生成现象的语言的句法,包括异常和可变状态是必不可少的。此外,我们已经开发了抽象绑定树的分类语义,正式在建设性类型论使用Agda证明助手。多排序的名词性abt也形成了即将到来的JonPRL证明助手版本的句法基础,JonPRL是Nuprl传统中扩展的构造性类型论的实现。
2016-01-23 cs.LO cs.PL
Success and failure of programming environments - report on the design and use of a graphic abstract syntax tree editor
STAPLE项目(在80年代末)研究了一种用于函数式编程的持久化架构。工作已经完成了两个方向:一个持久的系统内的功能性语言的编程环境的发展和实验转移到行业的功能原型的专业知识。本文是关于第一次活动的报告。第一部分给出了Absynte的一般描述--该项目内开发的抽象语法树编辑器。下面的部分将尝试衡量这种编辑器的有效性,并讨论结构化语法编辑(特别是基于抽象语法树的环境)所带来的问题。
2007-10-11 cs.HC cs.PL
TRANX: A Transition-based Neural Abstract Syntax Parser for Semantic Parsing and Code Generation
Carnegie Mellon University(卡内基梅隆大学)
我们提出TRANX,一个基于转换的神经语义解析器,映射到正式的意义表示(MR)的自然语言(NL)的话语。TRANX使用基于目标MR的抽象语法描述语言的转换系统,这给它带来了两个主要优点:(1)它是高度精确的,使用来自目标MR的语法的信息来约束输出空间并对信息流建模,以及(2)它是高度可概括的,并且可以很容易地应用于新类型的MR,只需编写与MR中允许的结构相对应的新的抽象语法描述。在四个不同的语义解析和代码生成任务上的实验表明,我们的系统是可推广的,可扩展的,有效的,与现有的神经语义解析器相比,注册强大的结果。
2018-10-05 cs.CL cs.PL
Free Foil: Generating Efficient and Scope-Safe Abstract Syntax
本文提出两种方法使 foil 更易用:结合自由作用域单子生成高效类型安全的抽象语法,并提供 Template Haskell 函数从朴素表示自动生成作用域安全表示,以 $λΠ$ 为例验证并给出基准测试。
2024-05-26 cs.PL
Extended Initiality for Typed Abstract Syntax
初始语义学的目标是将与签名相关联的语法解释为某类“模型”的初始对象,为抽象语法产生归纳和递归原则。Zavió证明了一个简单类型语法的初始性结果:给定一个签名S,与S相关联的抽象语法构成了单子中S的模型范畴中的初始对象。然而,她的定理提供的迭代原则只考虑了在一组固定的对象类型上的两种语言之间的翻译。我们推广Zavió的模型概念,使对象类型可以变化,产生一个更大的类别,同时保持其中语法的初始性。因此,我们得到了一个扩展的初始性定理的类型化抽象语法,在不同类型的条款之间的翻译可以指定通过相关的范畴理论的迭代算子作为一个初始态射。我们的定义确保通过初始化指定的翻译是类型安全的,即在明显的意义上与源语言和目标语言中的类型兼容。我们的主要例子是通过命题作为类型的范例:我们指定命题和推理规则的经典和直觉命题逻辑通过各自的类型签名。然后,我们使用范畴论的迭代算子指定一个双重否定翻译从前者到后者。第二个例子是PCF的签名。对于这种特殊情况,我们在证明助手Coq中将定理形式化。然后,我们指定,通过范畴理论的迭代运算符,从PCF的无类型的λ演算的翻译。
2012-04-05 cs.LO cs.PL
Towards Cumulative Abstract Semantics via Handlers
University of Colorado Boulder(科罗拉多大学博尔德分校);Amazon(亚马逊)
本文提出通过作用域效应实现累积抽象语义,以构建模块化且优雅的抽象解释框架。
2026-02-17 cs.PL
A Weakly Initial Algebra for Higher-Order Abstract Syntax in Cedille
Cedille是一个相对较新的工具,基于Curry风格的纯类型论,没有原始的数据类型系统。使用新技术的基础上依赖的交叉类型,归纳数据集及其归纳原则。这种方法的一个好处是它允许探索新的或高级形式的归纳数据类型。本文报告的工作进展中的一个这样的形式,即高阶抽象语法(HOAS)。我们在纯类型论的背景下考虑HOAS的性质,与传统的λ演算的环境模型的概念进行比较。我们看到了一种替代方案,基于我们所称的Kripke函数空间,我们可以在Cedille中推导出弱初始代数。使用编码给出了几个例子。
2019-10-24 cs.LO cs.PL
Functional programming with lambda-tree syntax
我们提出了一个新的功能性程序设计语言,MLTS,使用的数据树语法的方法来编码绑定出现在数据结构的设计。在这种方法中,绑定永远不会成为自由的,也不会脱离它们的范围:相反,数据结构中的绑定被允许移动到程序中的绑定。MLTS的设计在程序中包含了额外的站点,这些站点直接支持绑定的移动。为了正式定义语言的操作语义,我们提出了一个抽象的语法MLTS和一个自然的语义评估。我们将把这样的自然语义看作是一个丰富逻辑中的逻辑理论,这个逻辑包括 * 名义抽象 * 和 *nabla-quantifier*:因此,MLTS的自然语义规范可以给出一个简洁而优雅的表示。我们提出了一个类型化的原则,自然地扩展了核心ML程序的类型化,我们通过几个例子来说明MLTS的功能。本文简要介绍了一个MLTS的联机解释器。
2019-08-09 cs.PL
A Higher-Order Abstract Syntax Approach to Verified Transformations on Functional Programs
我们描述了一种方法来验证实现的转换功能的程序,利用高阶表示的语法。在这种方法中,使用遗传Harrop公式的逻辑指定变换。一方面,这些规范直接作为实现,是Lambda Prolog语言中的程序。另一方面,它们可以用作Abella系统的输入,该系统允许我们证明关于它们的属性,从而证明关于实现的属性。我们认为,这种方法是特别有效的实现转换,分析绑定结构。我们通过在Lambda Prolog中描述对这种结构敏感的类型化闭包转换和代码提升等转换的简洁编码,并通过展示如何使用Abella证明其正确性来做到这一点。
2016-01-23 cs.LO cs.PL
Abstract Representation of Binders in OCaml using the Bindlib Library
OCaml的Bindlib库提供了一组工具,用于通过变量绑定操作数据结构。它非常适合抽象语法树的表示,并且已经被用于六种语言和证明助手(包括逻辑框架Dedukti的新版本)的实现。Bindlib针对快速替换进行了优化,并支持变量重命名。由于绑定的表示是基于高阶抽象语法的,因此在替换过程中不会发生变量捕获。因此,变量名在替换时不会更新。然而,它们可以被显式地重新计算以避免“视觉捕获”(即,具有相同外观名称的不同变量)。
2018-07-05 cs.PL
Tree Notation: an antifragile program notation
本文提出了一种新的简单、通用的语法--树记法。语言设计者可以在树表示法的基础上发明新的程序设计语言,称为树语言。与传统的程序设计语言相比,树语言有许多优点。我们包括一个可视化摘要,以简洁地显示问题和发现。然后,我们描述了问题-BNF抽象语法树(AST)解析步骤-并介绍了我们发现的新解决方案:一个新的2D程序设计语言家族,直接编写为几何树。
2017-10-23 cs.PL
Revisiting Code Similarity Evaluation with Abstract Syntax Tree Edit Distance
University of Luxembourg(卢森堡大学);Luxembourg Institute of Science and Technology(卢森堡科学技术研究所)
本文重新审视代码相似度评估,重点研究AST编辑距离在多种语言中的表现,并提出并发布了一种增强版TSED自适应指标,实验证明其在所有测试语言中均有效。
2024-06-03 cs.CL cs.PL cs.SE
Reasoning with Higher-Order Abstract Syntax in a Logical Framework
基于具有更高类型量化的直觉或线性逻辑的逻辑框架已成功地用于对程序设计语言和推理系统领域中的许多重要判断给出高级、模块化和形式化的规范。给定这样的规范,考虑证明框架中指定系统的属性是很自然的:例如,给定函数式程序设计语言的求值规范,证明该语言是确定性的或求值保留类型。开发这种推理框架的一个挑战是高阶抽象语法(HOAS),一种优雅的和声明性的对象级抽象和替换处理,很难在涉及归纳的证明中处理。在本文中,我们提出了一个元逻辑,可用于推理使用HOAS编码的判断,这个元逻辑是一个简单的直觉主义逻辑,承认高阶量化简单类型的非线性项(HOAS的关键成分),以及归纳和定义的概念的扩展。我们通过考虑直觉和线性逻辑的编码,探讨了HOAS编码的形式元理论分析的困难,并正式推导出这些逻辑的重要子集的割的容许性。然后,我们提出了一种方法,以避免高阶抽象语法的好处和分析所产生的编码的能力之间的明显的权衡。我们通过涉及简单函数式和命令式程序设计语言PCF和PCF:=的示例来说明这种方法。我们正式推导出这样的属性,作为唯一性的类型,主题减少,确定性的评价,和等价的过渡语义和自然语义表示的评价。
2001-01-15 cs.LO cs.PL
Implementing a Category-Theoretic Framework for Typed Abstract Syntax
在以前的工作(“从签名到单子在UniMath”)中,我们描述了一个抽象语法的范畴理论建设的签名,机械化的UniMath库的基础上Coq证明助手。在目前的工作中,我们描述了什么是必要的推广工作,占简单类型的语言。首先,必须推广某些定义,以解释简单类型情况下非内函子的自然外观。事实证明,在许多情况下,我们的机械化结果在没有任何代码更改的情况下延续到广义定义。第二,现有的机械化图书馆$ω$ -cocontinuous函子必须扩展的建设和必要的多排序语法定理。第三,语义签名的理论框架必须从monoidal推广到bicategorical设置,再次说明在类型化情况下出现的非内函子。这使用了具有给定源的函子上的内函子的动作,以及动作之间强函子的相应概念,所有这些都使用最近开发的双范畴理论库在UniMath中形式化。我们解释了需要做什么来将所有这些成分模块化地连接在一起。我们的工作的主要结果是一个一般的建设,当美联储与一个简单类型的语言的签名,返回该语言的实现与适当的样板代码,特别是,一个认证的一元替换操作。
2021-12-13 cs.PL math.CT
Formal Metatheory of Second-Order Abstract Syntax
尽管在理论和实践方面都进行了广泛的研究,但形式化,推理和实现具有变量绑定的语言仍然是一项艰巨的工作-重复的样板文件和过于复杂的捕获避免替换元理论经常阻碍语言的实际有趣属性。现有的发展提供了一些缓解,但代价是不方便和容易出错的术语编码和缺乏正式的基础。我们提出了一个启发性的语言形式化框架中实现的Agda。该系统将具有变量绑定运算符的语法签名的描述转换为内部编码的归纳数据类型,该数据类型配备有语法操作,例如弱化和替换,以及它们的正确性属性。所生成的元理论进一步结合了元变量及其相关的元替换操作,这使得二阶方程/重写推理。该框架的基础数学基础-初始代数语义-通过构造将语言的组合解释导出到满足语义替换引理的模型中。
2022-01-10 cs.DM cs.LO cs.PL
Trees That Grow
我们研究了函数数据类型的可扩展性概念,作为一种新的方法来装饰抽象语法树与额外的信息集的问题。我们在重新设计GHC中表示Haskell抽象语法的数据类型时观察到了这种可扩展性的需求。具体来说,我们描述了我们的方法,在Haskell中使用一种新的语法机器来表达可扩展的数据类型的树装饰问题。我们表明,语法机器是完整的,因为它可以表达所有的语法可能的形式扩展到代数数据类型声明。然后,我们描述了一个编码的语法机制的基础上现有的功能在格拉斯哥Haskell语言(GHC)。
2016-10-15 cs.PL
A Higher-Order Abstract Syntax Approach to the Verified Compilation of Functional Programs
我们认为,功能性程序设计语言的编译器的实现和验证大大简化了采用高阶表示的语法称为高阶抽象语法或HOAS。HOAS的基本思想是使用一种元语言,它为绑定相关概念提供内置的逻辑处理。通过将元语言嵌入到更大的编程或推理框架中,可以将对象语言中的绑定结构的处理吸收到系统的元理论中,从而大大简化整体实现和推理过程。我们在这篇论文中提出并证明了上述论点的有效性的方法来验证执行的编译器转换的函数程序,利用HOAS。在这种方法中,函数程序的转换首先以基于规则的关系规范的形式表达。这些规范被渲染成语言lambda Prolog的程序。一方面,这些程序直接作为实现。另一方面,它们可以用作Abella系统的输入,该系统允许我们证明关于它们的属性,从而证明关于实现的属性。lambda Prolog和Abella都支持使用HOAS方法。因此,它们构成了一个框架,可用于在验证编译中测试HOAS方法的好处。我们用它们来实现和验证一个编译器的代表性的功能程序设计语言,体现了许多编译器的核心,这些语言的转换。在这两个编程和推理阶段,我们展示了如何使用的HOAS方法显着简化了绑定结构的表示,操作,分析和推理。
2017-02-11 cs.LO cs.PL
Concrete Syntax with Black Box Parsers
上下文:Meta编程的很大一部分是匹配、分析和转换语法树。许多Meta编程系统处理抽象语法树,但这需要对描述抽象语法的数据类型的结构有深入的了解。因此,Meta编程是容易出错的,并且Meta程序对这样的AST的结构的演变没有弹性,需要对这些程序进行侵入性的、容易出错的改变。询价:具体的语法模式通过允许Meta程序员使用对象语言的实际语法来匹配和创建语法树来缓解这个问题。然而,支持具体语法模式的系统需要对象语言的具体语法以它们自己的形式体系。创建这样的语法是一个代价高昂且容易出错的过程,特别是对于Java和C++这样的现实语言。方法:在本文中,我们提出了具体的,一种技术来扩展Meta编程系统与可插拔的具体语法模式,基于外部,黑盒解析器。我们在Rascal(一个开源Meta编程系统和语言工作台)的上下文中具体说明了这一点,并展示了如何重用Java、JavaScript和C++的现有解析器。此外,我们提出了Tympanic,一个DSL声明性地将外部AST结构映射到Rascal的内部数据结构。Tympanic允许Concretely的实现者解决Java中面向对象的类层次结构和Rascal的代数数据类型之间的阻抗不匹配。代数数据类型和AST编组代码都是自动生成的。知识:Concretely和Tympanic的概念架构支持重用预先存在的外部解析器及其在元编程系统中的AST表示,这些元编程系统具…
2019-02-01 cs.PL
Abstract Gringo
本文定义了ASP Grounter GRINGO的输入语言的语法和语义。该定义涵盖了在早期关于该语言语义的工作中没有讨论的几个构造,包括间隔、池、整数除法、非数值聚合和lparse风格的聚合表达式。这个定义是抽象的,因为它忽略了用ASCII字符串表示程序的一些细节。它作为GRINGO 4.5版以上的规范。
2018-02-14 cs.PL
Parametric Compositional Data Types
在以前的工作中,我们已经说明了组合数据类型(CDTs)为实现语言和处理抽象语法树(AST)提供的好处。基于Swierstra的数据类型la carte,CDT被实现为一个Haskell库,该库以模块化和可扩展的方式定义递归数据类型和函数。虽然CDTs提供了一个强大的工具来分析和操纵AST,他们缺乏一个方便的表示变量绑定。在本文中,我们弥补这一不足,结合框架的CDTs与Chlipala的参数高阶抽象语法(PHEAS)。我们展示了如何从函子到反函子的概括使我们能够捕获PHOAS,同时仍然保持CDTs的原始实现的功能,特别是其模块化。与以前的方法不同,我们避免了所谓的外来术语,而不诉诸抽象类型:当我们想要在CDT上执行检查递归计算的CDT的转换时,这是至关重要的,例如常数折叠。
2012-02-14 cs.PL
AoA: Theorem Proving Agent over Abstract Syntax Tree of Redesigned Language
Nanyang Technological University Singapore(南洋理工大学新加坡分校);Imperial College London London, UK(伦敦帝国理工学院伦敦分校);University of Edinburgh Edinburgh, UK(爱丁堡大学爱丁堡分校)
研究针对交互式定理证明中人工操作限制可扩展性及基于LLM的证明智能体成本高的问题,提出将智能体从源文本提升到抽象语法树的方法,实现了AoA,在多个方面有显著提升且解决更多难题。
2026-07-21 cs.AI cs.LG cs.PL
Variable binding, symmetric monoidal closed theories, and bigraphs
本文研究了使用对称monoidal封闭(SMC)结构表示语法变量绑定,特别是线性方面的语言。在我们的设置中,首先指定一个SMC理论T,它可以表达绑定操作,在某种程度上让人想起高阶抽象语法。这个理论产生了一个SMC范畴S(T),它的态射在某种意义上是所需语法中的项。我们将我们的方法应用到詹森和米尔纳的(抽象绑定)二图,这是线性w.r.t.流程.这导致了另一类的双图,我们比较原始。
2009-05-26 cs.LO cs.PL math.CT
AST-Probe: Recovering abstract syntax trees from hidden representations of pre-trained language models
University of Murcia(穆尔西亚大学);University of Montreal(蒙特利尔大学);Institute for Clarity in Documentation(文档清晰化研究所);Inria Paris-Rocquencourt(法国国家信息与自动化研究所巴黎-罗克库尔中心);Rajiv Gandhi University(拉吉夫·甘地大学);Tsinghua University(清华大学);Palmer Research Laboratories(帕尔默研究实验室)
预先训练的语言模型的目标是学习文本数据的上下文表示。预训练的语言模型已经成为自然语言处理和代码建模的主流。使用探针,一种研究隐藏向量空间的语言属性的技术,以前的工作表明,这些预先训练的语言模型在其隐藏表示中编码简单的语言属性。然而,以前的工作没有评估这些模型是否编码的整个语法结构的程序设计语言。在本文中,我们证明了一个语法子空间的存在,躺在隐藏的表示预先训练的语言模型,其中包含的语法信息的程序设计语言。我们表明,这个子空间可以从模型的表示中提取,并定义了一种新的探测方法,AST-Probe,使整个抽象语法树(AST)的输入代码片段恢复。在我们的实验中,我们表明,这个句法子空间存在于五个国家的最先进的预训练语言模型。此外,我们强调模型的中间层是编码大多数AST信息的层。最后,我们估计了该句法子空间的最佳大小,并表明其维度远低于模型表示空间的维度。这表明预先训练的语言模型使用其表示空间的一小部分来编码程序设计语言的语法信息。
2022-09-10 cs.AI cs.CL cs.LG
An Improved Implementation and Abstract Interface for Hybrid
Hybrid是一种在Isabelle/HOL中实现的形式化理论,它提供了一个使用高阶抽象语法(HOAS)表示和推理对象语言的接口。这个接口是围绕一个HOAS变量绑定运算符构建的,该运算符是从de Bruijn索引表示定义地构造的。在本文中,我们做了各种改进的混合动力,最终在一个抽象的接口,一方面使混合动力一个更数学上令人满意的理论,另一方面具有重要的实际好处。我们首先修改混合的类型的条款,更好地隐藏其实现方面的de Bruijn指数,排除在类型级别的术语与悬空指数。我们提出了一套改进的定义,和一系列新的引理,提供了一个完整的表征混合的原语在HOAS级别的属性。这个新包的好处包括一个新的充分性证明和改进对象逻辑的推理。这样的证明是在更高的层次上进行的,而不涉及更低层次的de Bruijn语法。
2011-11-01 cs.LO cs.PL
The ModelCC Model-Based Parser Generator
形式语言让我们精确地定义数据的文本表示。形式语法,通常以BNF的形式产生,描述语言语法,然后注释语法导向的翻译,并完成语义动作。除了数据的文本表示之外,当需要相应的数据结构的显式表示时,语言设计者必须设计合适的数据模型与其适当的语言规范之间的映射,然后开发从解析树到数据模型实例的转换过程。不幸的是,无论何时必须修改文本表示的格式,更改都必须在整个语言处理器工具链中传播。这些更新非常耗时、乏味且容易出错。此外,如果不同的应用程序使用相同的语言,则必须维护相同语言规范的多个副本。在本文中,我们介绍了ModelCC,基于模型的解析器生成器,从语言处理的语言规范,从而避免了语法驱动的解析器和解析器生成器所造成的许多问题。ModelCC在解析过程中引入了引用解析。因此,ModelCC能够从输入字符串中获取抽象语法图,而不是返回抽象语法树。
2015-01-11 cs.FL cs.PL
Abstract Syntax Tree for Programming Language Understanding and Representation: How Far Are We?
Nanjing University(南京大学);Nanyang Technological University(南洋理工大学)
本文通过实证研究系统评估了基于AST与基于Token的代码表示在多项代码任务上的效果,发现AST整体表现较弱但在特定子集上有优势,并分析了AST各处理阶段的影响,为后续研究提供指导。
2023-12-01 cs.AI cs.CL cs.PL