美文网首页
【系列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—文法和词法】

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