首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

打破国外垄断,开发中国人自己的编程语言(1):编写解析表达式的计算器

这几种工具都是依赖于文法生成词法分析器和语法分析器的,例如,在antlr4中,如果要识别加减乘除四则运算,只需要编写下面的文法即可。...而且文法还标识了优先级,antlr4规定,写在前面的文法的优先级高于写在后面的文法的优先级。...大家可以打开这两个文件,看到每一个文件的内容都有上百行,这要是人工编写,会累死人,而使用Antlr4,只需要4行文法就搞定。...文法如下: r : 'hello' ID; 在Antlr4中,每一个文法都要用分号(;)结尾,如果是固定的字符串,如关键字,用单引号括起来。如'hello'。 ID表示任意的标识符,也是终结符。...如果文法文件很大时,会生成相当多的回调方法,例如,Ori语言的文法就生成了数百个回调方法,这些回调方法并不一定都用到,在这种情况下,并不需要实现所有的回调方法,所以Antlr4在生成回调接口文件的同时,

2.3K40
您找到你想要的搜索结果了吗?
是的
没有找到

浅尝antlr4

浅尝Antlr4 前言 Antlr是什么 In a word, 多源语言多目标语言的一个语法分析框架 以下是官方文档的解释: ANTLR(ANother Tool for Language Recognition...这种方式可以很大程度上使语法更易于阅读(按每位用户自己的设计),同时使得它们能避免与特定的应用程序耦合在一起,以下是官方的解释(官方文档): 其它相关概念见antlr在github上的官方文档 安装antlr4...官方文档 安装Java(1.7版或更高版本),这个不会就入土8 下载antlr4 添加antlr-4.9-complete.jar到CLASSPATH: 将其放入.bash_profile,就不需要每次都改环境变量了...为ANTLR Tool和 TestRig创建alias: 输入antlr4验证一下安装情况: 获取targer language为python的分析模块 获取.g4语法文件 ANTLR的GitHub...更换成https://github.com/antlr/grammars-v4/tree/master/java/java中的.g4文件后就没问题了 生成分析模块 按官方文档生成分析模块源码: antlr4

1.6K21

编译原理文法详解_编译原理为什么存在递归文法

这里主要讨论上下文无关文法构成的语法和自顶向下、自底向上的语法分析。...与此相对的上下文有关文法例如aSb -> abab 就是上下文有关文法。 推导 把产生式看成重写规则,符号串中的非终结符用产生式右部的串(α)代替。 推导具有自反性,传递性。...因此先匹配digit和()的文法。...然而,有的文法不能采用自顶向下分析,因为产生了左递归。 左递归的判定和消除 左递归的判定:一个文法G,若存在P经过一次或多次推导得到Pa(即能推导出以P开头的式子), 则称G是左递归的。...把所有关于S的文法带入,并且得到直接左递归的公式,例如上面的文法: Q→(Sa|a)b即Q→Sab|ab|b S→Sabc|abc|c|bc 然后就可以使用公式了。

66410

文法和语言

文法的定义 文法的形式定义 四元组:G=(VT,VN,P,S)G=(V_T,V_N,P,S)G=(VT​,VN​,P,S) VTV_TVT​:终结符集合 终结符是文法所定义的语言的基本符号。...文法分类体系 0、1、2、3型文法 0型文法 无限制文法,对于任意一个推导式α->β,α中至少包含一个非终结符 由0型文法G生成的语言L(G)叫做0型语言。...1型文法 上下文有关文法,对于任意一个推导式α->β,∣α∣<=∣β∣|α|<=|β|∣α∣<=∣β∣ 该类文法中不包含空产生式ε,因为当有空产生式的时候,α的长度将大于β的长度。...由上下文有关文法(1型文法)生成的语言L(G)叫做上下文有关语言。 2型文法 α必须属于终结符。 由上下文无关文法(2型文法)生成的语言L(G)叫做上下文无关语言。...二义性文法 如果一个文法可以为某个句子生成多颗分析树,则称这个文法是二义性的。

30130

论文赏析RNN文法

Neural Network Grammars 代码地址:github 今天要介绍的这篇论文是来自NAACL16的Recurrent Neural Network Grammars,主要贡献点就是提出了一种新的文法...RNNG,不同于传统的PCFG之类的文法,RNNG使用RNN来对句子和它的句法树的联合概率进行建模,因此它是一个生成模型。...因此本文提出了一种利用RNN建模出来的全新文法RNNG,建立在句子的句法结构之上,消除了PCFG的上下文无关假设。...RNN文法 RNNG定义为三元组 ? ,其中 ? 是非终结符集合, ? 是终结符集合,并且 ? , ? 就是神经网络的参数集合。...总结 RNNG这个文法是个生成式模型,建模了句子和句法树的联合分布,稍稍修改即可应用到句法分析和语言模型中,效果也非常的好。

56120

Chomsky文法类型判断

文法简介 1.0型文法(短语文法) 如果对于某文法G,P中的每个规则具有下列形式: u:: = v 其中u∈V+,v∈V*,则称该文法G为0型文法或短语文法,简写为PSG。...0型文法或短语结构文法的相应语言称为0型语言或短语结构语言L0。这种文法由于没有其他任何限制,因此0型文法也称为无限制文法,其相应的语言称为无限制性语言。...2.1型文法(上下文有关文法) 如果对于某文法G,P中的每个规则具有下列形式: xUy:: = xuy 其中U∈VN;u∈V+;x,y∈V*,则称该文法G为1型文法或上下文有关文法,也称上下文敏感文法,...3.2型文法(上下文无关文法) 如果对于某文法G,P中的每个规则具有下列形式: U :: = u 其中U∈VN;u∈V+,则称该文法G为2型文法或上下文无关文法,简写为CFG。...左线性文法和右线性文法通称为3型文法或正则文法,有时又称为有穷状态文法,简写为RG。

1.1K20

编译原理之文法

文法类型 产生式的限制 文法产生的语言 0型文法 α→β 其中α、β∈(VT∪VN) *,∣α∣≠0 0型语言 1型文法 α→β 其中α、β∈(VT∪VN) *,∣α∣≤∣β∣ 1型语言,即上下文有关语言...2型文法 A→β 其中A∈VN,β∈(VT∪VN) * 2型语言,即上下文无关语言 3型文法 A→α|αB(右线性)或A→α|Bα(左线性) 其中,A,B∈VN,α∈VT∪{ ε} 3型语言...a,aA→a(左边至少有一个大写字母) 1型文法:有一特例:α→ε也满足1型文法。...) 3型文法:如有:A→a,A→aB,B→a,B→cB,则符合3型文法的要求。...如果所有的终端结点都是与终结符关联的,每棵推导树的终端结点自左至右所构成的字符串应该是文法G的一个句型,则该字符串是文法G的一个句子,此时该推导树是完全推导树。

49220

Antlr4实战:统一SQL路由多引擎

后续文章会Apache Calcite单独讲解,这里主要讲解Antlr4解析工具的应用。...在最坏的情况下,这个算法的复杂度为O(n4),它帮助ANTLR在解决歧义与分支决策的时候更加智能。...DISTINCT FROM ; 上述只是列举一小部分改写的词法文件内容,还有很多细节这里就不再赘述,需要强调的是,写词法和语法规则时,不能产生歧义并严谨,否则语法产生非期望结果,因此需要初学者多次调试验证...然后使用Antlr4工具命令或idea右键产生gen包下的8个文件,以下一一介绍功能。...Antlr为每种文法(词法和语法)创建tokens文件,当它把混合文法(词法规则和语法规则写在一起)拆分为词法和语法时,你将要看到两个tokens文件。

9K41

66. 精读《手写 SQL 编译器 - 语法分析》

通过这张图可以看到 LL 家族与 LR 家族的能力范围: 如图所示,无论 LL 还是 LR 都解决不了二义性文法,还好所有计算机语言都属于无二义性文法。...另外也有一些根据文法自动生成 parser 的库,比如兼容多语言的 antlr4 或者对 js 支持比较友好的 pegjs。...这是一个右递归文法,不难看出,这个文法可以如此展开: selectList => word (',' selectList)? => a (',' selectList)?...Antlr4 支持左递归,因此文法可以写成 selectList ::= selectList (, word)? | word,用在我们这个简化的代码中会导致堆栈溢出。...左递归自动消除,因为通过文法转换,会改变文法的结合律与语义,最好能实现左递归自动消除(左递归在上一篇精读 文法 有说明)。 生成语法树,仅匹配语句的正确性是不够的,我们还要根据语义生成语法树。

1.4K30

编译原理:文法的分类

在编译原理课程中,我们知道有4种文法:0型、1型、2型、3型。本文将对他们的区别进行描述。 0型文法 0型文法是“无限制文法”、“短语结构文法“,它对产生式几乎没有限制。...对于任意的产生式\alpha \Rightarrow \beta , 0型文法要求,产生式左部的\alpha至少包含1个非终结符。 1型文法 1型文法称为“上下文有关文法”(CSG)。...与定义的 | \alpha | \le | \beta | 相矛盾,因此1型文法不包含空产生式。 2型文法 2型文法称为“上下文无关文法”(CFG)。2型文法要求其产生式左部必须为非终结符。...2型文法的产生式的一般形式为: A \Rightarrow \beta 3型文法 3型文法又称为“正则文法”(RG)。它分为左线性文法和右线性文法两种。...四种文法之间的关系 四种文法是逐级限制的关系:

96920

消除文法的左递归

,然后用消除直接左递归的方法改写文法。...如果一个文法不含有回路,即形如PP的推导,也不含有以ε为右部的产生式,那么就可以采用下述算法消除文法的所有左递归。...Q和R的规则是多余的,将其删除并化简,最后得到文法G[S]为: S→abcS’/ bcS’/ cS’ S’ →abcS’/ ε 当然如果对文法非终结符排序的不同,最后得到的文法在形式上可能不一样,但它们都是等价的...遇到的难点和解决方案 由于文法的形式多种多样,在消除递归时要考虑到各种情况,一般来说,首先要解决统一文法格式,因此需要将具有相同非终结符左部的文法用|符号合并。...在消除过程中要判断两个量,一个是|的位置,另一个是非终结符的位置,由于合并的文法串中有多个|,并且会生成新的转换的文法,因此需要用while语句进行处理,直到所有文法的形式不再变化为止。

3.9K30

Spring自动装配歧义性笔记

zhen.Playable’ available: expected single matching bean but found 2: CD,video // 找到了两个都bean都能匹配 自动装配歧义性问题...上面的异常就是出现了歧义性。...Spring为我们扫描了我们代码中的bean(这个部分是没有问题的),但是,在自动装配的过程中却由于歧义性而报错,并且,造成这样的歧义性还有由于Autowired这个注解仅仅按照类型进行装配——上面的CD...为了解决这个问题,我们需要通过一定的手段来限定: 声明首选的bean 限定自动转配的bean 声明首选的bean 根据名字我们很容易理解,就是声明在有歧义性情况下,Spring到底选择哪一个bean来装配...但是,如果多个bean都有相同的特性,都是用了相同的标记的@Qualifier注解,那么同样又会出现歧义性问题。

14340
领券