โปรแกรม ANTLR
ANTLR คืออะไร
อ่านว่า Antler ย่อมาจาก ANother Tool for Language Recognition
ANTLR เป็นโปรแกรมสำหรับรับ input grammar file และ auto generate output source code for recognizer (recognize คล้ายๆกับ RegEx)
ทำไมต้อง ANTLR
ใช้ RegEx ไม่ได้หรอ
ประโยชน์ที่รู้ตอนนี้คือ เราสามารถเขียน rule ง่ายๆ โปรแกรม ANTLR จะสามารถ gen code ให้เป็นภาษาตามที่เราต้องการได้ ไม่ว่าจะเป็น python, java, java script, c, c++, ruby
ประโยชน์อีกข้อคือ หากในอนาคตมีการเปลี่ยนแปลง rule ก็ไม่ต้องไปแก้โค้ดใหม่ ให้ ANTLR gen ใหม่ให้ เพียงกดแค่คลิกเดียว สบายมากๆ
ประโยชน์อื่นๆ ตาม document ที่เค้าว่า RegEx ทำไม่ได้ คือ
1. สามารถทำ complex parsing ได้ 2. support ‘error-messages’ ANTLR จะshow ด้วยว่า row ไหน column ไหน ที่ผิด ซึ่ง RegEx ทำไม่ได้
if you need error-messages, complicated things, ANTLR is good option
สรุป
ANTLR is code generator. It takes so called grammar file as input and generates two classes: lexer and parser.
Lexer runs first and splits input into pieces called tokens
Parser who builds abstract syntax tree, interprets the code or translate it into some other form
Grammar file contains everything ANTLR needs to generate correct lexer and parser
วิธีติดตั้ง ANTLR
ปัจจุบัน (2016) เป็น version 4.5.x แต่ไม่ support python แหะ
prerequired
antlr-x.y-complete.jar --> download the "Complete ANTLR x.y Java binaries jar" file
antlr python runtime --> http://www.antlr3.org/download/
Install ANTLR
1. download the “Complete ANTLR x.y Java binaries jar” file
$ wget http://www.antlr.org/download/antlr-3.5.2-complete.jar
2. Add ANTLR to your CLASSPATH environmental variable and run it
สำหรับ v3
export CLASSPATH=~/antlr-3.5.2-complete.jar:$CLASSPATH java org.antlr.Tool -version
สำหรับ v4
export CLASSPATH=~/antlr-4.5.1-complete.jar:$CLASSPATH java org.antlr.v4.Tool
3. Configure your CLASSPATH to include ANTLR on future logins
echo "export CLASSPATH=~/antlr-3.5.2-complete.jar:$CLASSPATH" >> ~/.bashrc
4. วิธีการติดตั้ง python runtime
ไปที่ folder python runtime พิมพ์คำสั่ง
$ python setup.py install
5. สร้าง rule ( file .g )
http://www.needfulsoftware.com/ANTLR3/Python
6. เมือมี rule file .g แล้ว ขั้นตอนต่อไปคือ การ generate 2 files:
Grammar1Lexer.py
Grammar1Parser.py
ให้พิมพ์คำสั่ง:
สำหรับ v3
$ $ java -classpath "antlr-3.5.2-complete.jar" org.antlr.Tool ./Playspace/ANTLR/v3/Python/Grammar1/*.g
สำหรับ v4
$ java -classpath "antlr-4.5.1-complete.jar" org.antlr.v4.Tool ./Playspace/ANTLR/v4/MyGrammar/*.g
7. ขั้นตอนสุดท้าย ทดสอบ เรียกใช้ rule
Grammar1$ python main.py











