antlr v4 使用指南連載3——g4文件概覽


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;

未完待續>>>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM