

ANTLR v4--introduction
source link: https://dannypsnl.github.io/blog/2017/09/03/cs/introduction-of-antlr4/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

ANTLR v4--introduction
今天我想介紹一個強大有趣的工具--ANTLR
這個工具根據我們定義的文法產生處理原始碼的 parser,當然不只是處理程式語言,你也可以用來處理其他資料
cd /usr/local/lib
sudo curl -O http://www.antlr.org/download/antlr-4.7-complete.jar
export CLASSPATH=".:/usr/local/lib/antlr-4.7-complete.jar:$CLASSPATH"
alias antlr4='java -jar /usr/local/lib/antlr-4.7-complete.jar'
alias grun='java org.antlr.v4.gui.TestRig'
之後會用到的通常是antlr4
這支程式
因為它用來產生 parser
我們需要建立一個檔案叫xxx.g4
,而裡頭的 grammar 就必須是grammar xxx;
舉例來說JSON.g4
就會是
grammar JSON;
接下來我們談ANLTR
的語法還有它如何運作
首先如果你接觸過v3
以前的antlr
,那麼你一定知道embbed action
不過這個版本的antlr
並不需要全都使用embbed action
來實現程式邏輯
反之它加入了xxxBaseListener
來處理大部分的翻譯過程
你也可以選擇Visitor
來實作,但是visitor
需要顯式的調用Context
,並不適合大型複雜的文法
Listener
則能應付絕大多數的情況,它的API
都是enterXxx
跟exitXxx
的格式,名稱相當直觀
ANTLR 要求Token
使用大寫英文字母開頭,grammar
則使用小寫
NUM : [0-9]+ ;
ID : [a-z]+ ;
stat : ID '=' expr
| expr
;
expr : NUM
| ID
;
ID
跟NUM
都是token
,stat
跟expr
則是文法規則
|
表示不同的可能
;
表示規則結束
可以看到如果我們想要辨別符號,必須用''
包起來,除了符號,關鍵字也要這樣處理,像這樣
Class : 'class' ;
+
表示一個或無限多個
*
表示沒有或無限多個
?
表示有或沒有
定義ID
跟NUM
時,我都使用了正規表達式來處理,這是為了方便而放入的功能
你也可以選擇
NUM : ('0' .. '9')+ ;
最後就是產生parser
antlr4 -Dlanguage=Cpp JSON.g4
-Dlanguage
指定產生什麼語言的parser
這裡是C++
如果不指定,那麼預設是Java
目前支援Java
, C#
, Python2|3
, JavaScript
, Go
, C++
, Swift
儘管選擇你習慣的那個
為什麼要學 Antlr?
事實上編譯技術在很多地方都有用途
例如Firefox
團隊為了加速JavaScript
eval
函式的執行速率,在編譯到eval
時會進行預處理,讓JavaScript
真的執行到這邊時已經少了許多工作
簡單一些的應用可能有:編寫DSL
簡化開發工作
例如新增網路服務API
,如果用特製的語言將工作進行簡化
routes:
get "/":
resp Page1
那麼我們實際上需要負擔的工作量就大幅縮小了吧!
而且亦便於未來的維護工作,而DSL
最棒的要點就在於,我們往往無須實現完整的通用語言
比如我們可以在回傳的區塊回到Java
語言
routes:
get "/":
@java {
// ... Your java code
}
這樣我們就不需要實現太過麻煩的東西
而一樣能享受DSL
的方便度
Recommend
-
99
What is ANTLR? ANTLR (ANother Tool for Language Recognition), is an ALL(*)
-
11
Create a Text Parser in C# with ANTLRCreate a Text Parser in C# with ANTLR - YouTube
-
16
Antlr实战之JSON解析器slowjson | XINDOO 当前位置:XINDOO > 编程 > 正文 最近一直在学习编译原理...
-
10
在 .NET 应用中使用 ANTLR 什么是 ANTLR ? ANTLR 是功能强大的解析器生成器,用于读取,处理,执行或翻译结构化文本或二进制文件。它被广泛用于构建语言,工具和框架。ANTLR从语法中生成...
-
8
探究Presto SQL引擎(1)-巧用Antlr 自2014年大数据首次写入政府工作报告,大数据已经发展7年。大数据的类型也从交易数据延伸到交互数据与传感数据。数据规模也到达了PB级别。 大数据的规模大到对数据的获取、存储、管理、分析超出了传统数据库软...
-
8
How to write grammar for your own language with ANTLR .? (Part -I) : Setting up the Environment( Intellij with ANTLR) Reading Time...
-
6
ANTLR4 Runtime for PHP First steps 1. Install ANTLR4 The getting started guide should get you started. 2. Install the PHP ANTL...
-
7
Integrate ANTLR 4 into a C ++ application advertisements Recently I picked up a copy of The Definitive ANTLR 4 Reference and sinc...
-
7
100 Languages Speedrun (74 Part Series) Parser generators existed since the late 1960s, but even today they still see ve...
-
4
gcc, LLVM, ANTLR 2020-12-19 GNU C Compiler在1987年3月22日发布了第一个beta版本,Richard Stallman原本想利用Free University Compiler Kit,但作者Andy Tane...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK