ANTLR与与编译原理学习笔记

识别和处理编程语言是 Antlr 的首要任务,编程语言的处理是一项繁重复杂的任务,为了简化处理,一般的编译技术都将语言处理工作分为前端和后端两个部分。其中前端包括词法分析、语法分析、语义分析、中间代码生成等若干步骤,后端包括目标代码生成和代码优化等步骤。

Antlr 致力于解决编译前端的所有工作(不包括目标代码生成)。使用 Anltr 的语法可以定义目标语言的词法记号和语法规则,Antlr 自动生成目标语言的词法分析器和语法分析器;此外,如果在语法规则中指定抽象语法树的规则,在生成语法分析器的同时,Antlr 还能够生成抽象语法树;最终使用树分析器遍历抽象语法树,完成语义分析和中间代码生成。整个工作在 Anltr 强大的支持下,将变得非常轻松和愉快。

 

文本处理

当需要文本处理时,首先想到的是正则表达式,使用 Anltr 的词法分析器生成器,可以很容易的完成正则表达式能够完成的所有工作;除此之外使用 Anltr 还可以完成一些正则表达式难以完成的工作,比如识别左括号和右括号的成对匹配等。

先来看一张图片

compile

字符序列:程序代码存放在程序文本里的表现形式被词法分析后生成记号序列(ex: if (x > 5 )    这样的  i  f  (  x >  5 )  这样就叫一个个字符流)

词法分析:将字符序列解析成记号序列(了解转移图的概念)

记号序列:一个个token流

语法分析:检查这个程序的语法是否合法,符合语言规则, 然后在内存当中建立一个抽象语法树这样的数据结构.

  语言规则: 三型文法(正则表达式)  二型文法(上下文无关文法)  一型文法(上下文有关文法)  零型文法(任意文法).

  这里只讨论上下文无关文法

 上下文无关文法是一个四元组G  = (T, N, P, S) 其中T是终结符集合,N是非终结符集合, P是一组产生式规则用来联系终结符集   合和非终结符集合,S是唯一的开始符号. ex:如下图

分析树和二义性文法
E-> num
  | id
  | E + E
  | E * E
能否推导出句子 3 + 4 * 5  
显然通过下面两个推导式可看出上面的文法是一个二义性文法, 造成的后果就是会生成不同的分析树  如图(a) 和图(b)
E -> E + E
  -> 3 + E
  -> 3 + E * E
  -> 3 + 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值