`
庄表伟
  • 浏览: 1152308 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ANTLR学习心得——抄书(2)

 
阅读更多
2.文法和语言的形式定义
文法是描述语言的,所以语言的定义以文法为基础。
(1)文法:
文法是描述语言的语法结构的形式规则(亦称文法规则,产生式或重写规则等)。文法规则必须是准确且是可理解的。
 
定义2.9(文法)

   一部文法G是一个四元组
  G=(VT,VN,S,P)
其中:
  VT:非空有限的终结符号集(一般用小写字母表示)。
  出现在句子中的符号称为终结符号。例如组成语言的基本符号、单词符号都是语言的终结符号。从语法分析的角度看,终结符号是一个语言不可再分的基本符号。
  VN:非空有限非终结符号集(一般用大写字母表示)。设V是文法G的符号集,则有V=VT∪VN,  VT∩VN=⊙。
  非终结符是一个语法范畴,表示一类具有某种性质的符号。它不出现在句子中,而出现在文法的产生式的左部。
  例如,前述汉语文法的子集中,<句子>,<主语>,<谓语>,<名词>等都为非终结符。
  S:文法的开始符号或识别符号,亦称公理,S∈VN。S代表语言最终要得到的语法范畴:例如前述汉语文法的子集中的<句子>即为该文法的开始符号。
  P:产生式集。所谓产生式就是按一定格式书写的定义语法范畴的文法规则,它是一部文法的实体。产生式的形式为,P→M或P∷=α,其中P称为产生式的左部,α为产生式的右部或称为P的候选式,有P∈V+,α∈V*。注意,公理S至少且必须在文法某个产生式的左部出现一次。
  例2.2  数字文法定义为
  <NUMBER>→0|1|2|3|...|9
  其中,VN={NUMBER},VT={0,1,2,...,9},S=VN,P为定义式本身。
  注意,文法产生式中的一些符号“→”,“|”,等要与非终结符和终结符相区别。它们被称
为元语言符号。我们称描述另一种语言的语言是元语言,元语言中的符号称为元语言符号。
  例如,简单的算求表达式文法Gl定义为
  {{E},{i,+,*,(,)},{E},{E→i|i+i|i*i|(E)}}
 
  (2)语言:
  如果给定—部文法G,G的语言是什么?语言的句子是什么?文法中的规则可以帮助分析或构造句子。由给定文法生成句子的思想是:从文法的开始符号出发,对当前产生式的符号串中的非终结符替换为相应产生式右部的符号串,如此反复,直至最终符号串全由终结符号组成。
  例2.3 试以例2.1给出的文法和句子为例考察如何应用文法产生句子。
  <句子> => <主语> <谓语>                      //<句子>替换为<主语><谓语>
             => <形容词> <名词> <谓语>        //<主语>替换为<形容词><名词>
             => 小 <名词> <谓语>                   //<形容词>替换为“小”
             => 小八哥 <谓语>                         //<名词>替换为“八哥”
             => 小八哥 <动词> <宾语>             //<谓语>替换为<动词><宾语>
             => 小八哥吃 <宾语>                      //<动词>替换为“吃”
             => 小八哥吃 <形容词> <名词>       //<宾语>替换为<形容词><名词>
             => 小八哥吃大 <名词>                  //<形容词>替换为“大”
             => 小八哥吃大花生                        //<名词>替换为“花生”
  到此为止,所得到的符号串中已经全部由终结符组成,这就是文法产生的语言的一个句子。为此,给出语言的非形式定义。
  定义2.10(语言)
  从文法G的公理S出发,反复使用产生式对非终结符进行替换,最终得到的终结符串的全体,称为文法G表示的语言,记作L(G)。
  例2.4设有文法G
    S->P|aPb
    P->ba|bQa
    Q->ab
  有L(G)={ba,baba,abab,ababab}
 
分享到:
评论

相关推荐

    antlr3最终手册

    书中包含了多位行业专家的评论和推荐,如Martin Fowler、Bob McWhirter、Neal Gafter等,他们从各自领域的角度分享了ANTLR3的应用经验和见解,为读者提供了多维度的学习参考。 ### 职业发展与技能提升 手册强调了...

    antlr-2.7.7.jar.zip

    这个"antlr-2.7.7.jar.zip"文件是ANTLR的一个特定版本——2.7.7的Java版本,包含ANTLR库的jar文件。 ANTLR的工作原理基于上下文无关语法(Context-Free Grammar,CFG),它可以解析符合给定语法的输入,并生成抽象...

    The Definitive ANTLR4Reference 学习笔记

    学习ANTLR 4的参考手册时,首先需要了解的是语言、语法、解析树、词法单元和解析器的基本概念。语言由一系列有效句子组成,每个句子包含短语,而短语又由子短语组成。语法是语言的语法规则的正式定义,它指定了子...

    The Definitive ANTLR 4 Reference.pdf_antlr_

    2. **自动错误恢复**:ANTLR 4具有内置的错误恢复机制,当输入不匹配预期的语法时,它可以尝试恢复解析,继续处理剩余输入,而不是立即停止。 3. **LL(*)和预测LL(*)解析**:ANTLR 4使用预测LL(*)算法,这是一个...

    The Definitive ANTLR 4 Reference.pdf

    2. **语法规则**:ANTLR 4使用一种称为“解析树表示法”(ATN)的高级表示法来定义语法规则。书中将详细解释如何编写这些规则,包括基本的符号、操作符以及如何处理嵌套结构。 3. **词法分析**:ANTLR 4同时处理...

    antlr4读书笔记七八章

    通过本章的学习,我们了解到ANTLR4提供的两种强大工具——解析树监听器和访问者模式,可以帮助我们将特定于应用程序的代码与语法解耦,从而提高代码的可维护性和可复用性。无论是通过监听器响应规则事件还是通过访问...

    The+Definitive+ANTLR+4+Reference 学习笔记word

    总的来说,《The Definitive ANTLR 4 Reference》是一本详尽的ANTLR4参考书,对于那些希望利用ANTLR4进行语言解析和工具开发的人来说,这是一份宝贵的资源。通过学习笔记,读者不仅可以了解ANTLR4的基本概念,还能...

    编译原理学习框架antlr4

    在编译原理的学习中,ANTLR4扮演了核心角色。编译器是将高级语言转换为机器语言的程序,这一过程分为词法分析、语法分析、语义分析和代码生成四个主要阶段。ANTLR4主要用于语法分析阶段,它通过解析源代码的语法结构...

    The Definitive ANTLR 4 Reference

    《ANTLR 4权威指南》这本书详细介绍了ANTLR v4的使用和相关...总之,《ANTLR 4权威指南》是一本全面的ANTLR v4学习资源,无论对于初学者还是经验丰富的开发者,都是理解和掌握ANTLR v4这一强大工具不可或缺的参考书。

    antlr.jar.zip

    描述"antlr.jar"直接指出了这个压缩包解压后的主要内容——ANTLR的Java实现,即一个名为"antlr.jar"的文件。这个JAR文件包含了ANTLR解析器生成器的全部Java代码,开发者可以将其引入到Java项目中,利用ANTLR的能力来...

    antlr权威指南

    ANTLR(ANother Tool for Language Recognition)是一门强大的解析器生成器,主要用于读取、处理、...书中涵盖了从基本概念到高级特性的详细讲解,同时提供了丰富的实例和实战指导,是学习ANTLR不可或缺的参考资料。

    ANTLR

    2. **ANTLR的安装与配置**:介绍如何在不同的开发环境中安装ANTLR库,如在Java、Python等环境下的设置步骤。 3. **语法规则定义**:详细解释ANTLR语法文件的结构,如如何定义关键字、标识符、运算符等词法单元,...

    ANTLR入门 中英文

    书中的实例和练习帮助初学者快速掌握ANTLR的使用方法。同时,马维达的中文翻译确保了国内读者能无障碍地理解ANTLR的核心理念和技术。 ANTLR的应用场景非常广泛,比如构建自定义编程语言、解析配置文件、实现SQL查询...

    antlr-2.7.7.jar

    - **AST构造**:ANTLR 2的AST构造机制比较基础,没有ANTLR 4那样强大的树遍历和重写功能。 - **性能**:ANTLR 2的解析速度可能不如ANTLR 4快,且内存消耗可能较高。 - **社区支持**:由于是较老的版本,社区资源和...

    antlr-2.7.7.jar和antlr-2.7.6.jar

    ANTLR(ANother Tool for Language Recognition)是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件。ANTLR被广泛应用于各种编程语言的编译器和解释器的构建,它能生成Java、C#、Python...

    Antlr4 C++ 计算器

    总之,"Antlr4 C++ 计算器"是一个学习ANTLR4和语言解析技术的好起点,它展示了如何使用ANTLR4生成的解析器和词法分析器在C++环境中解析和执行数学表达式。通过深入理解和实践这个项目,你可以提升对编译原理和语言...

    antlr-2.7.6.jar

    标题“antlr-2.7.6.jar”指的是ANTLR库的特定版本——2.7.6,这是一个Java版本的库文件。.jar(Java ARchive)文件是Java平台上的可执行文件,包含了ANTLR的相关类和资源,使得开发者能够在Java环境中使用ANTLR的...

    antlr4-master 源码

    总之,深入学习ANTLR4的源码,不仅可以帮助我们成为ANTLR4的专家,也能加深对解析理论、编译器构造和语言设计的理解。这是一项有价值且富有挑战性的任务,对于任何从事相关领域工作的人来说都是一个宝贵的资源。

Global site tag (gtag.js) - Google Analytics