Javacc的例子
PARSER_BEGIN(Simple1)
public class Simple1 {
public static void main(String args[]) throws ParseException {
Simple1 parser = new Simple1(System.in);
parser.Input();
}
}
PARSER_END(Simple1)
void Input() :
{}
{
MatchedBraces() ("
"|"
")*
}
void MatchedBraces() :
{}
{
"{" [ MatchedBraces() ] "}"
}
設定好javacc的bin目錄後,在命令提示符下輸入javacc Simple1.jj 然後javacc就會為你生成下面幾個java原始碼檔案
Simple1.java
Simple1TokenManager.java
Simple1Constants.java
SimpleCharStream.java
Token.java
TokenMgrError.java
其中Simple1就是你的語法分析器的物件,它的建構函式引數就是要分析的輸入流,這裡的是System.in。 class Simple1就定義在標記PARSER_BEGIN(Simple1)和PARSER_END(Simple1)之間。但是必須清楚的是,PARSER_BEGIN和PARSER_END中的名字必須是詞法分析器的名字(這裡是Simple1)。
PARSER_END下面的定義就是文法非終結符號的定義了。
Simple1的文法基本就是:
Input -> MatchedBraces ("
"|"
")*
MatchedBraces -> “{“ MatchedBraces “}”
從它的定義我們可以看到,每個非終結符號對於一個過程。比如Input的過程
void Input() :
{}
{
MatchedBraces() ("
"|"
")*
}
在定義void Input後面記住需要加上一個冒號“:”,然後接下來是兩個塊{}的定義。
第一個{}中的程式碼是定義資料,初試化資料的程式碼。第二個{}中的部分就是真正定義Input的產生式了。
每個產生式之間用”|”符號連線。
注意:這裡的產生式並非需要嚴格BNF正規化文法,它的文法既可以是BNF,同時還可以是混合了正規表示式中的定義方法。比如上面的 Input -> MatchedBraces ("
"|"
")*
中(“
”|”
”)* 就是個正規表示式,表示的是
或者
的0個到無限個的重複的記號。而
除了
每個非終結符號(Input和MatchedBraces)都會在javacc生成的Simple1.java中形成Class Simple1的成員函式。當你在外部呼叫Simple1的Input,那麼語法分析器就會開始進行語法分析了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10230672/viewspace-966505/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Javacc sampleJava
- javacc學習總結Java
- JavaCC學習筆記Java筆記
- 編譯原理與javacc初探編譯原理Java
- Calcite(一):javacc語法框架及使用Java框架
- javacc-LOOKAHEAD MiniTutorial 翻譯Java
- sqlldr的例子SQL
- Lucene學習總結之八:Lucene的查詢語法,JavaCC及QueryParser(1)Java
- JSONP的例子JSON
- GetMemory的典型例子
- at new 的使用例子
- jQuery的常用小例子jQuery
- php常用到的例子PHP
- PIPE函式的例子函式
- 發郵件的例子
- [Shell] Sort排序的例子排序
- XPATH的簡單例子單例
- 【python小例子】小例子拾憶Python
- split 例子
- hasMap 的鍵值對的例子ASM
- python字典的小例子Python
- ps命令的10個例子
- TensorFlow 的簡單例子單例
- Exchange Partition的實驗例子
- HTML5全屏的例子HTML
- jQuery cssHook的經典例子jQueryCSSHook
- 一個jquery的小例子jQuery
- 14 個 grep 命令的例子
- OpenCv 中Snake程式的例子OpenCV
- 計算時間的例子
- 清除行遷移的例子
- 子查詢的典型例子
- mybatis like 查詢的例子MyBatis
- PHP中ZendCache用法的小例子PHP
- scrapy 使用的基本流程和例子
- SQL隱碼攻擊的例子SQL
- 三. 基於例子的學習
- 在 Pylons 中使用 MongoDB 的例子MongoDB