JavaCC JJTree
时间:2014-03-12
来源:互联网
JavaCC 即系 "Java Compiler Compiler, The Java Parser Generator" (https://javacc.java.net/).
FreeMarker 呢个 template library 都系用佢.
javacc 个 grammar repository 咁啱又有目标文法个档, 就下载嚟试试.
搅咗几日先识用, 终於可以将想要既嘢拎到出嚟. 效果唔错. 用呢个工具产生出嚟既 parser 产生出嚟既 abstract syntax tree 可以继续写 Java 去探访每个节点, 达到非常准确的语意分析, 从而分析 SP 入面 call 某个 procedure 用咗啲乜嘢 parameters, 最终会整理出一个给人看的列表.
深感 JavaCC, JJTree 及其 Eclipse plugin 之好用, 在此绍介给大家.
作者: a8d7e8 发布时间: 2014-03-12
http://www.antlr.org/
作者: fitcat07 发布时间: 2014-03-12
感觉上 ANTLR 既学习曲线都几 steep. 如果可以可以在这里讨论下吗?
如果想做更复杂嘅嘢,又或想用一个更多功能、更先进、较活跃(指更新、维护)嘅替代品,我推荐 ANTLR:
http://www.antlr.org/
作者: a8d7e8 发布时间: 2014-03-12
如果有 Grammar file 应该方便过 JavaCC!
作者: a8d7e8 发布时间: 2014-03-12

我睇紧 ANTLR 作者写嘅书:Language Implementation Patterns,书中大量使用 ANTLR V3 做例,睇落好好用,因此大胆推介。

啱啱用 google 搵到:
http://www.antlr3.org/grammar/list.html
入面都有好多 PL/SQL grammar 喎。
作者: fitcat07 发布时间: 2014-03-12
既然出咗 v4, 我当然想用返 v4.

因为睇呢度 的 v4 做法其实同 JavaCC + JJTree 好相似. (v3 版则好像不太好吧....)
都只系加 # NodeName, 再写 custom parse listener or visitor.
分别系 v4 似乎学习咗 JavaCC 的优点, 再将 JavaCC 需要用 JJTree 呢个依赖性移除, 直接在 v4 加入 AST, listener/visitor 等支援.
而且如果 anltr v4 可直接拎到 node 入面的 strings, 就会比 JavaCC+JJTree 简单得多. 后者每个 node 只有 firstToken 同 lastToken 可取用, 即系要做 recursion 去到 leaf 先可拎晒所有 function call 的 nodes (包括埋 comma..).
我未用过 ANTLR。

我睇紧 ANTLR 作者写嘅书:Language Implementation Patterns,书中大量使用 ANTLR V3 做例,睇落好好用,因此大胆推介。

啱啱用 google 搵到:
htt ...
[ 本帖最后由 a8d7e8 於 2013-12-9 08:12 PM 编辑 ]
作者: a8d7e8 发布时间: 2014-03-12
如果想快尐做到嘢,用 V3,因为已经有大把现成 grammar。
想学嘢,或想将来可以延伸及维护,V4 一定较好。佢本书我谂唔睇唔得:http://pragprog.com/book/tpantlr ... e-antlr-4-reference
作者: fitcat07 发布时间: 2014-03-12
用 V3 定系 V4,睇你想要做尐乜啦。
如果想快尐做到嘢,用 V3,因为已经有大把现成 grammar。
想学嘢,或想将来可以延伸及维护,V4 一定较好。佢本书我谂唔睇唔得:http://pragprog.com/book/tpantlr2 ...
procedure doit(p1,p2,p3)
end;
begin
doit('well', var1, funcA(1,2,3));
doit(var2, 'asf', var3);
end;
如你睇嗰本书啲例子咁啱有做呢样嘢, 可否分享下啊?
作者: a8d7e8 发布时间: 2014-03-12
照我所知,V3 同 V4 都支援建立 AST,同使用 tree visitor。而 V4 就好似更自动化,亦唔再支援 in-grammar actions。
Chapter 11 of LIP 就系讲 Translating Computer Languages。如果你要求系唔需要 semantic analysis,你可能只须要做一个简单嘅 language translator。就好似一见到呼叫 doit(),就将所有参数列出。作者称为 Syntax-Directed Translation (Pattern 29),即喺 grammar 内,加入 actions,当遇到呼叫 doit() 就呼叫相应函数,来将所需资料输出。不过,呢个做法,好似 V4 唔再支援。可能要改用更通用嘅 Target-Specific Generator Classes (Pattern 31)。主要分别系唔会喺 grammar 内加入 actions,而系利用 visitor 嚟 traverse ANTLR 所产生嘅 AST。
作者: fitcat07 发布时间: 2014-03-12
唔太明白「所有对 doit 呼叫的可能输入的列表」所指,有输出例子最好。
照我所知,V3 同 V4 都支援建立 AST,同使用 tree visitor。而 V4 就好似更自动化,亦唔再支援 in-grammar actions。
Chapter 11 of LIP 就系 ...
用 SDT keyword 搵到 http://www.antlr.org/wiki/display/ST/Language+Translation+Using+ANTLR+and+StringTemplate , antlr 可直接 f=formalParameter 咁拎啲 嘢(唔知点形容喇) 嚟用.
JavaCC 要去到 token 层面拎嘢用. 如果识用 antlr3 做 SDT 应该可减少程式码做人手处理既嘢.
系呢, 点解你会无端端睇佢本书既?
作者: a8d7e8 发布时间: 2014-03-12
其实一直对 compiler/interpreter 都有兴趣。想当年,因为师兄话呢科超难,选科时唔敢拣,只想 hea 读。亦都庆幸无拣,听同学讲真系读得好辛苦。
试过写一个名为 KiGB 嘅 emulator,做到执行 Z80 嘅 interpreter,真系几过瘾。
亦有自修过,奈何资质所限,都只系学到皮毛。
唯有就系迫自己睇多尐书,希望有日会明白多尐囉。
作者: fitcat07 发布时间: 2014-03-12
对对, 睇书/paper系学习既门路, 奈何我懒根深殖, hahaaaa. (你讲本书我都有睇返你提嗰啲 chapter 架)
我都系对呢啲嘢有兴趣, 选科遇唔啱无得拣 >< 睇 yacc/bison 嗰啲好似明明地, 但又谂唔通, 又无需要用到.
宜家有真实需要, 实践过, 将来可以试多啲嘢了.

Chapter 12 就系讲 Template,功能更强大,啱啱睇到,未睇完。 其实一直对 compiler/interpreter 都有兴趣。想当年,因为师兄话呢科超难,选科时唔敢拣,只想 hea 读。亦都庆幸无拣,听同学讲真系读得好 ...
作者: a8d7e8 发布时间: 2014-03-12

因此,我不断做 SPOJ 嘅题目,练习多咗,真系有尐尐进步㗎。

另外,解答别人问题,亦系一个好嘅练习。有时睇落好简单,分析过后先知背后道理。老生常谈:「温故知新」,真系啱嘅。

作者: fitcat07 发布时间: 2014-03-12
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28