美文网首页
【系列1—文法和词法】

【系列1—文法和词法】

作者: hello高world | 来源:发表于2017-02-15 20:49 被阅读0次

读自:The Definitive ANTLR 4 Reference, 2nd Edition.pdf

1、文法一

<b>Hello.g4 </b>

grammar Hello;// Define a grammar called Hello
r : 'hello' ID ; // match keyword hello followed by an identifier
ID : [a-z]+ ;// match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines, \r (Windows)

2、词法解析一

<b>解析语句一:hello parrt ctrl+D</b>

[@0,0:4='hello',<1>,1:0]
[@1,6:10='parrt',<2>,1:6]
[@2,12:11='<EOF>',<-1>,2:0]

含义:
"@0" : 表示第1个token(词)
"0:4":表示[0,4]位置上内容
"<1>": 表示token类型——类型1
"1:0": 表示第1行,第0个位置开始

"@1" : 表示第2个token(词)
"6:10": 表示[6,10]位置上的内容
"<2>": 表示token类型——类型2 : ID
"1:6": 表示第1行,第6个位置开始

3、文法二

<b>ArrayInit.g4</b>

grammar ArrayInit;
init : '{' value (',' value)* '}' ;    //{ + value + 后面跟着多个 ",value" + }
value : init | INT ;
INT :[0-9]+ ; 
WS : [\t\r\n]+ -> skip ; 

规则表达式:小写的
标识符:大写的

4、词法解析二

<b>解析词二: {99, 3, 451}</b>

[@0,0:0='{',<1>,1:0] 
[@1,1:2='99',<4>,1:1]
[@2,3:3=',',<2>,1:3]
[@3,5:5='3',<4>,1:5] 
[@4,6:6=',',<2>,1:6] 
[@5,8:10='451',<4>,1:8] 
[@6,11:11='}',<3>,1:11]

总共有7个词,分别是:
"{" //第1个词,[0,0]位置上内容,第1种类型,第1行:第index=0开始
"99" //第2个词,[1,2]位置上内容,第4种类型,第1行:第index=1开始
","//第3个词,[3,3]位置上内容,第2种类型,第1行:第index=3开始
"3"
","
"451"
"}"

解析结果成语法树:(init { (value 99) , (value 3) , (value 451) })

待思考:

问题:第X种类型是怎么出来的呢?

相关文章

  • 【系列1—文法和词法】

    读自:The Definitive ANTLR 4 Reference, 2nd Edition.pdf 1、文法...

  • 【遣词造句用英语】语法连载 1(2019-10-29)

    第1章 英语词法(英语用词的法则) 全部的英语语法,分为“词法”和“文法”。词法讲解英语用词的法则,文法讲解英...

  • 英语的语音与语法

    英语的语音包括强弱、长短、连读、节奏和语调等等;语法包括文法和词法,文法就是行文造句的方法,词法就是各种词汇的变化...

  • 编译原理

    步骤 词法分析 语法分析 语义分析与中间代码产生 优化 目标代码生成 文法 3型文法:正则文法,用于描述程序设计语...

  • 程序设计语言|正规式

    词法分析是把构成源程序的字符串转换成单词符号序列。词法规则可用3型文法(正规文法)或正规表达式描述,他产生的集合是...

  • 使用新版本golang项目中goyacc依赖问题的处理

    背景 最近项目使用中有用到go mod 和 goyacc工具。goyacc涉及到编译原理的词法分析,文法分析等功能...

  • 词法分析

    词法分析把源代码转换成单词流。 词法部分与正则文法相对应,读取前缀几个字符就可以区分是什么单词。特别设计时会让词法...

  • 编译原理笔记10:语言与文法,正规式转CFG,正规式和CFG,文

    对语言进行形式化描述的规则叫文法。 词法规则、语法规则都以形式化的方法对语言进行描述,这样的规则就叫文法。在使用 ...

  • JS基础-作用域与闭包

    1.理解词法作用域和动态作用域 词法作用域:定义在词法阶段的作用域换言之,词法作用域是由你在写代码时将变量和块作用...

  • NLP—博客推荐

    NLP词法、句法、语义、语篇综合系列:NLP+词法系列(一)︱中文分词技术小结、几大分词引擎的介绍与比较NLP+词...

网友评论

      本文标题:【系列1—文法和词法】

      本文链接:https://www.haomeiwen.com/subject/gxzqwttx.html