免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 10709 | 回复: 38
打印 上一主题 下一主题

编译器学习笔记02(世界公民antlr)——2014_2_27 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-27 11:29 |只看该作者 |倒序浏览
在LLVM上碰了一头包,感觉windows是受歧视的软件,就因为高手不爱用吗?xp是被歧视之中最被歧视的,最新版本的 LLVM和CLANG安装windows需要 visual studio 2012 编译,而visual 2012不支持 xp,换句话 xp被抛弃了。LLVM 虽然名字是low level ,但表现像LV一样。

转JAVA,地球村的公民,对windows和Linux一视同仁。
https://theantlrguy.atlassian.ne ... arted+with+ANTLR+v4

安装步骤很清晰,过程也很简单,几分钟搞定。

安装之后还赠送一个简单的例子,

首先是一个定义语法的文件,很简单


然后,编写两个bat文件,最好放在path中,可以反复使用。



准备工作,


然后,就可以生成语法树了

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
2 [报告]
发表于 2014-02-27 13:54 |只看该作者
因为你无法得知windows的源代码

论坛徽章:
0
3 [报告]
发表于 2014-03-01 16:45 |只看该作者
本帖最后由 oldbeginner 于 2014-03-01 21:50 编辑

***********************************
乱中取稳
**********************************

为什么说antlr 乱呢?其实是中文资料很乱,网上的帮助文件一多半是04 07年的,最近的很少,是不是antlr 已经过时了,都去关注  来自**的你
除了antlr使用命令行,还有使用antlrworks,然后再结合vs 等工具,再加上版本不断升级,不同版本例子好像不兼容(至少我遇到很多,夸张的是同一个命令不同版本也不一样),非常困扰。

直接找到antlr 本营,
Sections
                    

    •                                     
                                                                        Getting Started with ANTLR v4                    
              
    •                                     
                                                                        Grammar Lexicon                    
              
    •                                     
                                                                        Grammar Structure                    
              
    •                                     
                                                                        Parser Rules                    
              
    •                                     
                                                                        Left-recursive rules                    
              
    •                                     
                                                                        Actions and Attributes                    
              
    •                                     
                                                                        Lexer Rules                    
              
    •                                     
                                                                        Wildcard Operator and Nongreedy Subrules                    
              
    •                                     
                                                                        Parse Tree Listeners                    
              
    •                                     
                                                                        Parse Tree Matching and XPath                    
              
    •                                     
                                                                        Semantic Predicates                    
              
    •                                     
                                                                        Options                    
              
    •                                     
                                                                        ANTLR Tool Command Line Options                    
              
    •                                     
                                                                        Runtime Libraries and Code Generation Targets                    
              
    •                                     
                                                                        Parser and lexer interpreters                    
              
    •    
                                                                        Integrating ANTLR into Development Systems                    
              
    •                                     
                                                                        Building ANTLR 4 with Maven                    
              




getting started 已经学过了,两天过去了,需要复习一下,换换代码,药不换。


首页上显示的例子,做一下,




  

论坛徽章:
0
4 [报告]
发表于 2014-03-02 21:00 |只看该作者
本帖最后由 oldbeginner 于 2014-03-02 21:56 编辑

*********************************
步入 The definitive ANTLR4 reference (English PDF)

*********************************

先看一个新闻,当然不谈大事。

记者采访社科院的一位同学,
记者,“这位同学,曾经伤害过中国科学院尊严的是谁?”

这位同学,“FREEBSD 和 MIPS 都曾经伤害过 中国 科学院 尊严!”


然后,全国政协委员:韩剧热潮伤害了我们的文化尊严(http://news.sina.com.cn/c/2014-03-02/154529602693.shtml




********************************

看这本书,是无奈之举,实在找不到讲ANTLR4 的中文资料。浏览了几十页,不由得想起另外一句话,水平只比你高一级的人写出来的教程一般是适合的。


前三章应该是废话,虽然也没仔细看,但能看出来没啥意思。
直接从第四章开始,目录如下

4. A Quick Tour . . . . . . . . . . . . 31
4.1 Matching an Arithmetic Expression Language 32
4.2 Building a Calculator Using a Visitor 38
4.3 Building a Translator with a Listener 42
4.4 Making Things Happen During the Parse 46
4.5 Cool Lexical Features 50

*******************************

4.1 作者要做一个计算器,很搞笑,作者说要简单一些,
To keep things simple,
但实际上
we’ll allow only the basic arithmetic operators (add, subtract,
multiply, and divide), parenthesized expressions, integer numbers, and variables.

+ - * / () 整数 变量,对刚入门的来说不简单



语法文件可以从网站antlr3.org上下载 tpantlr2-code.zip (159.95 KB, 下载次数: 4)


作者然后开始解释语法,我觉得不如先执行完,最后再解释,效果可能好些。

要解释如下内容,


执行效果,如下



*****************************************
再回到语法 g4 文件上,

• Grammars consist of a set of rules that describe language syntax. There
are rules for syntactic structure like stat and expr as well as rules for
vocabulary symbols (tokens) such as identifiers and integers.

• Rules starting with a lowercase letter comprise the parser rules.
这句我懂,小写字母开头的规则 表示 语法 规则。

•Rules starting with an uppercase letter comprise the lexical (token) rules.
这句我也懂,大写字母开头的规则 表示 词法 规则。

• We separate the alternatives of a rule with the | operator, and we can
group symbols with parentheses into subrules. For example, subrule ('*'|'/')
matches either a multiplication symbol or a division symbol.
这句比较复杂,应该分成 3 句,如下:

We separate the alternatives of a rule with the | operator.
利用 | 符号 表示 规则的其它候选。

We can group symbols with parentheses into subrules.
利用 () 表示 子规则。

说实话,这时用PPT 效果会比较好。  

论坛徽章:
0
5 [报告]
发表于 2014-03-02 22:17 |只看该作者
************************
继续 第四章

***********************

作者提供了一个java 测试文件,没看懂,





The (slightly cleaned up) text representation of the parse tree is not as easy
to read as the visual representation, but it’s useful for functional testing.

作者说,文本表达语法树 虽然 没有 图形表示 效果好,但是功能测试时还是有用的。

***********************

一分为二,

It’s a good idea to break up very large grammars into logical chunks

One way to do that is to split a grammar into parser and
lexer grammars.

把grammar语法 分成两块 ,语法 和 词法。







后面,作者又介绍了输错会出现什么,用处不大。

论坛徽章:
0
6 [报告]
发表于 2014-03-03 14:35 |只看该作者
本帖最后由 oldbeginner 于 2014-03-03 14:38 编辑

**********************************
antlr4 reference 你伤害了 英语 的尊严
韩国 和 朝鲜 的去汉字化
**********************************

一直觉得antlr4 的封面 有点奇怪,

搜了甲骨文的图片后,基本确定封面是一片甲骨文。选甲骨文作为封面,含义浅显易懂。

甲骨文 和 编译器 在某种 意义 下 是一致,虽然甲骨文和英语关系不大。

虽然,在编程方面是新新手,但我一直有个感觉,编程序就是写作文,中文系最应该是程序员,但事实恰恰相反,很多中文不好的是程序员,中文好的不会写程序。

****************************
不由得想到中国邻国的去汉字化运动。

去汉字化效果是好是坏?

变坏的有朝鲜,变好的有韩国。

说明什么?

汉字和这些国家变好变坏 没有太大相关性。


******************************

对于去汉字化的观点各异,我的想法很简单,而且是在我学习编译器后形成的,还没完善。

汉字体系就是一个操作系统(隐含了编译器功能),英语也是。

把汉字上升到 文化传承 属性,而 忽略 应用 属性,就好比 80年代,IBM 否认 windows系统,而坚持 自己的系统;又好比 Nokia 坚持自己什么什么系统,而忽略 android系统。

所以对于邻国的去汉字化运动,我的想法应该比较开明,毕竟邻国不会考虑太多 文化传承方面的,没用就可以去掉,有用可以保留,直到更合适的语言来代替。

英语就好像 开源的操作系统,不到成长,蒸蒸日上;汉语过去则是闭关锁国,不仅邻国在抛弃,自己人也在抛弃,不过现在好多了,网络新词汇和新 意思不断增加,当然科学方面成长的还欠缺。

这里了,北大做了一个非常负面的对汉语发展非常反面的案例,http://bjwb.bjd.com.cn/html/2013-09/05/content_106050.htm

北大的做法 相当于 对 去汉字化 的火上浇油,也是无知(不理解开源的含义,不理解优胜劣汰)的一种表现。

*******************************

没想到 学编译器,居然让我联想到 去汉字化 的真谛,本质就是换 操作系统。

汉字的生命力,在于其 未来 成长性, 而不是 过去的 辉煌,就像 大家 买android手机,而不是买Nokia手机一样。

我的呼吁,把软件系 并入 中文系,哈哈,应该很有意思。






   

论坛徽章:
0
7 [报告]
发表于 2014-03-03 14:52 |只看该作者
回复 5# oldbeginner

**************************************
利用 访问者 模式 实现计算器

**************************************
   
需要的文件有,


需要稍微修改一下语法文件,


另外还要写 两个 java 文件,




然后,就可以执行


********************************
我 java没有学过,但是感觉 不影响 学习 antlr4,只是在具体实现上 会存在问题。

论坛徽章:
0
8 [报告]
发表于 2014-03-03 16:06 |只看该作者
回复 7# oldbeginner

*********************************
4.3 观察者 模式

********************************
The biggest difference between the listener and visitor mechanisms is that
listener methods are called by the ANTLR-provided walker object, whereas
visitor methods must walk their children with explicit visit calls.
主要区别

使用的文件



然后,


   

论坛徽章:
1
午马
日期:2013-08-23 23:39:47
9 [报告]
发表于 2014-03-03 19:26 |只看该作者
用CMake, 这个跨平台, 或者转到linux和mac上

论坛徽章:
0
10 [报告]
发表于 2014-03-03 20:09 |只看该作者
回复 9# phy0077


    我已经安装了 windows 下的 cmake 和 gunwin32。
   
   让我转LINUX 是 为了 使用 low level LV 吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP