g4文件概览#

       在深入介绍之前,有必要先给大家了解一下g4文件的结构,以便对如何编写语法规则文件有个全局的认识,我想这是大有禆益的。因为这样我们就可以很清晰地知道需要的东西写在哪里,或者哪些东西是无法加到antlr中的。

grammar Name;
options {...}
import ...;
tokens {...}
@actionName {...}
<<rule1>>
...
<<rule2>>

这是一个完整的antlr语法规则文件,下面一一做出简要声明:

  1. grammar Name 这是词法跟语法都在同一个文件声明的写法,称之为combined。若要分开,可以使用lexer grammar Name和parser grammar Name。

  2. options 可以是如下四个选项。

    superClass:用于生成xxxLexer.java、xxxParser.java的父类

    language:目标语句,如java

    tokenVocab:toekn词库

    TokenLabelType:默认的是antlr的Token类型,这里可以使用自定义的token类,如MyToken。需要配合TokenFactory使用

  3. import 可以导入各个独立的lexer、parser文件,只能用于combined写法。

  4. actionName 可以是如下内容

    @header:定义类文件头。比如嵌入java的package、import声明

    @member:定义类文件内容。比如类成员、方法

如果要指定在lexer或者parser中,可以使用 @lexer::membere、@parser::member。

  1. rule 语法规则。

lexer示例##

lexer grammar HelloLexer;
HI : 'H' 'i'
ID : [a-z]+;
WS : [\t\n\r\s]+ -> skip;

parser示例##

parser grammar HelloParser;
options {
language=Java;
tokenVocab=HelloLexer;
} @header {
package com.laudandjolynn.antlr;
import java.util.Set;
import java.util.HashSet;
}
@member {
private int count;
public int getCount() {
return count;
}
}
start : HI ID;

未完待续>>>

antlr v4 使用指南连载3——g4文件概览的更多相关文章

  1. antlr v4 使用指南连载2——准备环境

    antlr v4 开发环境         从上一篇文章的例子中可以知道,antlr有一套自己的语法来声明目标语言的语法,因此它本身就需要编译或者使用antlr提供的api来读取这些语法规则,并使之可 ...

  2. antlr v4 使用指南连载1——简介

    antlr v4简介        antlr是一个强大语言解析工具,可以用于处理结构化文本.二进制文件.说白了,其实可以这么认为,antlr是一个更强大的正则表达式工具.它可以完成更多正则表达式无法 ...

  3. antlr v4 使用指南连载5——如何编写词法定义

    如何编写词法定义        继上一篇文章,相信大家都明了编写词法规则的两个基本原则.那么接下来就可以开始编写词法文件了.对于计算机科学来说,很多词法规则是一致的.如标识符.数字等,它们都可以重复在 ...

  4. antlr v4 使用指南连载4——词法规则入门之黄金定律

    词法规则入门 黄金定律一二 若输入串能被多个词法规则匹配,那么声明在词法文件最前面的规则生效. parser parser grammar HelloParser; options { languag ...

  5. Antlr v4入门教程和实例

    1 重逢ANTLR 最早知道ANTLR是当年学习Apache Derby数据库源码时,在看到SQL解析那一层时,第一次看到编译原理在实际项目中的应用,惊叹之余也只能望而却步.之前也根据网上一些资料尝试 ...

  6. ANTLR v4 权威参考笔记(目录)

    ANTLR v4是一款强大的语法分析器生成器,可以用来读取.处理.执行和转换结构化文本或二进制文件.通过称为文法的形式化语言描述,ANTLR可以为该语言自动生成词法分析器.生成的语法分析器可以自动构建 ...

  7. HTML5权威指南--标签新变化,文件API,拖放API(简要学习笔记一)

    1.标签元素更加语义化   2.内容类型仍然为“text/html”    扩展符仍然为html或者htm.    <1>DOCTYPE 声明<!DOCTYPE html>就可 ...

  8. 【Shell脚本学习指南笔记】重定向文件描述符 2>&1

    如: make > results 2>&1 重定向 > results让文件描述符1(标准输出)作为文件results,接下来的重定向2>&1有两个部分.2& ...

  9. 免费开源ERP Odoo实施指南 连载一:Odoo概述

    Odoo是什么 Odoo,以前叫OpenERP,是比利时Odoo S.A.公司开发的一个企业应用软件套件,开源套件包括一个企业应用快速开发平台,以及几千个Odoo及第三方开发的企业应用模块.Odoo适 ...

随机推荐

  1. [BZOJ]4199: [Noi2015]品酒大会(后缀数组+笛卡尔树)

    Time Limit: 10 Sec  Memory Limit: 512 MB Description Input Output Sample Input 10 ponoiiipoi 2 1 4 7 ...

  2. HDU2425:Hiking Trip(BFS+优先队列)

    给出一个地图,地图有四种路面,经过每种路面花费的时间不同,问从起点到终点所花费的最少时间是多少 把到各个点的花费存入队列中,然后弹出,即可得到最小 Sample Input 4 6 1 2 10 T. ...

  3. 探索C++多态和实现机理

    前一段时间被问到过一个问题,当时模模糊糊,就是说不清楚,问题问到说:什么情况下会将基类的析构函数定义成虚函数? 当时想到 如果子类B继承了父类A,那么定义出一个子类对象b,析构时,调用完子类析构函数, ...

  4. URL、网址、域名

    URL (Uniform Resource Locator)统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址.互联网上的每个文件都有一个唯一的URL ...

  5. js生成四位随机数的简便方法

    do out = Math.floor(Math.random()*10000); while( out < 1000 ) alert( out );

  6. jquery 引号问题

    varFrozenColumns="[[{'field':'CZ','title':'操作','width':80,'align':'center','formatter':function ...

  7. jdk1.7和jdk1.8区别

    转自:http://www.2cto.com/kf/201307/225968.html 本文是我学习了解了jdk7和jdk8的一些新特性的一些资料,有兴趣的大家可以浏览下下面的内容. 官方文档:ht ...

  8. 64. Minimum Path Sum(中等, 又做出一个DP题, 你们非问我开不开心,当然开心喽!^^)

    Given an m x n grid filled with nonnegative numbers, find a path from top left to bottom right which ...

  9. SVN/GIT精简使用教程

        MAC 显示点文件 显示:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏:defaults write com. ...

  10. RedHatEnterpriseLinuxServerRelease7.3上配置vsftp服务器

    1.vsftpd 服务启停相关命令 systemctl start vsftpd systemctl stop vsftpd systemctl restart vsftpd 2.配置文件/etc/v ...