日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Antlr语法

發布時間:2023/12/29 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Antlr语法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 1.注釋 /** * 注釋有 單行,多行,Javadoc注釋 三種 */ // 語法聲明,關鍵字 grammar // 不帶前綴的語法聲明是混合語法,可以同時包含詞法規則和文法規則 // 若要創建一份只允許文法規則出現的語法,使用聲明 parser grammar Name; 純詞法的語法聲明,使用 lexer grammar Name;grammar ZC; /* 多行注釋 */// 2.標識符 // 詞法符號名 和 詞法規則名 以 大寫字母開頭 // 文法規則 以 小寫字母開頭 // 首字母之后的字符可以是大小寫字符、數字和下劃線// 文法規則名 // expr 是 文法規則名 // : 表示后面是具體的文法規則 // 這個文法由 ID 詞法 或 STRING 詞法組成 expr : ID | STRING | ;// 3 文法規則 // 3.1 語法分析器由一系列文法規則組成,這些規則既可以位于文法語法中,也可以位于混合語法中 // 規則中可以包含由|分隔的備選分支。 stat : retstat | 'break' ';' | 'continue' ';'; retstat : ID;// 3.2 備選分支是一組可以為空的規則元素列表。例如,下列規則中的空備選分支使得整條規則成為了可選的 stat2 : retstat | ;// 3.3 備選分支的標簽 // 可以使用#給最外層的備選分支添加標簽,以獲得更加精確的語法分析器監聽器事件 // 一條規則中的備選分支要么全部帶上標簽,要么全部不帶標簽 // ANTLR為每個標簽生成一個規則上下文類 stat3 : 'return' e ';' # Return| 'break' ';' # Break; e : e '*' e # Mult| e '+' e # Add| INT # Int;// 4.規則元素 // 規則元素指明了語法分析器在特定的時間需要完成的任務 // 規則元素可以是一條規則、一個詞法符號 或者 一個字符串常量 // T 匹配詞法符號T,詞法符號以大寫字母開頭 // 'str' 匹配字符串常量 // r 匹配規則r,像函數一樣調用該規則,文法規則以小寫字母開頭 // r[<<args>>] 匹配r,并像函數調用一樣傳入一組參數 // {<<action>>} 在備選元素之后,后一個備選元素之前執行的代碼動作. // {<<p>>}? 執行語義判定<<p>>. // . 匹配任意除文件結束符之外的語法符號. // ~(INT|ID)匹配除INT或ID之外的任意詞法符號// 5.子規則 // 一條規則可以包含稱為子規則的備選分支塊 // 子規則和規則相似,只是缺少名字并被包裹在圓括號內。在子規則的括號內,可以包含一個或者多個備選分支 // 存在四種類型的子規則(其中x、y、z代表語法元素) // (x|y|z) 匹配該子規則內的任意備選分支 一次 // (x|y|z)? 匹配該子規則內的任意備選分支 一次 或 不匹配任何東西 // (x|y|z)* 匹配該子規則內的任意備選分支 0~多次 // (x|y|z)+ 匹配該子規則內的任意備選分支 1~多次 // 在子規則僅包含一個備選分支時,可以忽略子規則兩側的括號// 6.捕獲異常 // 當在一條規則中發生語法錯誤時,ANTLR會捕獲該異常,報告錯誤,并試圖從中恢復(可能通過消費更多的詞法符號來完成此過程),然后從規則中返回。 // 每條規則都包裹在一個try/catch/finally語句中// 7.規則屬性定義 // 與規則和動作相關的語法元素。規則可以像編程語言中的函數一樣,包含參數、返回值以及局部變量 // ANTLR會將你定義的所有變量收集起來并存儲到規則上下文對象中// 8.起始規則和文件結束符// 詞法符號 和 詞法規則名 // 詞法的語法 由 詞法規則組成,并且可被分解為多個模式 // 詞法規則的定義方式和文法規則非常相似,除了一些例外:詞法規則不能包含參數、返回值或者局部變量。 // 詞法規則名必須以大寫字母開頭,以和文法規則名區分開。// ID 詞法 表示: 只要不是 逗號 \n \t 中的一個字符就行 // 1.詞法模式 // 詞法模式 允許你將詞法規則按照上下文分組 // 2.詞法規則元素 // 詞法規則元素總結 // 'str' 匹配指定的字符或字符序列,如'while'或'=' // [char set]匹配字符集中的一個字符.如 [x-y]從x到y的字符集合(包含x和y). \n,\r,\b,\t,\,-, Unicode字符. // 3.遞歸詞法規則 // ANTLR詞法規則可以是遞歸的ID : ~[,\n\r"]+ ; // STRING詞法 STRING : '"' ('""'|~'"')* '"' ; INT: '1';// antlr關鍵字: import、fragment、lexer、parser、grammar、returns、locals、throws、catch、finally、mode、options、tokens// 1.語法導入 // 語法導入允許你將語法分解成可復用的邏輯單元 // 一個語法會從其導入的語法中繼承所有的規則、詞法符號聲明和具名的動作 // 位于“主語法”中的規則將會覆蓋其導入的語法中的規則,以此來實現繼承機制 // 可以將import看作是一種智能的、不會引入本文件中已經定義過的規則的引入語句(include statement) // 在處理一份主語法的過程中,ANTLR工具將所有被導入的語法加載到一起,然后將其中的規則、詞法符號類型以及具名動作合并到主語法中// 2.詞法符號聲明 // tokens區域存在的意義在于,它定義了一份語法所需,但卻未在本語法中列出對應規則的詞法符號// 文法規則 // 語法分析器由一系列文法規則組成,這些規則既可以位于文法語法中,也可以位于混合語法中 // Java程序通過調用ANTLR自動生成的、與預期的起始規則相對應的函數來啟動語法分析器 // 規則最基本的形式是規則名后面緊接著一個備選分支,然后是一個分號 expr2 : ID | STRING | ;

總結

以上是生活随笔為你收集整理的Antlr语法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。