免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: xyfree
打印 上一主题 下一主题

删帖吧 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-12-31 17:31 |只看该作者
加油啊!现在像这样的小伙子越来越少了

论坛徽章:
0
22 [报告]
发表于 2009-12-31 18:31 |只看该作者
原帖由 EricFisher 于 2009-12-31 16:28 发表
问一个问题,ANTLR可以用来设计脚本语言么?


只要你的脚本语言符合上下文无关文法的定义,或者可以转化成BNF的描述
就可以用ANTLR来生成这个语言的分析器或者编译器。

据我的推想,人的思维能产生的编程语言,一般(我意思是,不是刻意背离的)都可以用BNF描述的~
所以ANTLR应该能满足你的需求

原帖由 nicolas.shen 于 2009-12-31 17:31 发表
加油啊!现在像这样的小伙子越来越少了


谢谢,我会尽量做到最后,成为更少的那一群,哈哈

[ 本帖最后由 xyfree 于 2009-12-31 18:34 编辑 ]

论坛徽章:
0
23 [报告]
发表于 2010-01-02 09:48 |只看该作者
这些时间我也在重读编译原理,计划自己弄一个简单的编译器,严重支持LZ

论坛徽章:
0
24 [报告]
发表于 2010-01-02 23:00 |只看该作者
支持LZ。
5月份的时候,我也用antlr来着,不过我是做cga解释器,也算是一种脚本语言吧,遇到了一些问题解决不了,最后只能自己写。正好在这里问问LZ。
CGA有一套独特的语法规则,但是和L-system很像,我只用到了一种形式的。
形式大概是这样的:
n:predecessor:condition~successor:prob..~successor:prob
下面是几个具体的语句:

1 : footprint : 20>scope.area>10 ~ S( Y, random(0,20) ) low : 0.3  ~S( Y, random(20,40) ) high : 0.7
表示:当footprint元素的scope面积在10~20之间时,对footprint进行操作,有30%的可能将footprint沿Y轴拉伸0~20中的一个随机值并产生一个叫做low元素,有70%的可能将footprint沿Y轴拉伸20~40中的一个随机值并产生一个叫做high元素。S是CGA的一个操作,scope.area和random都是python函数,不仅仅有random,还可以是其它任何自定义的python函数

3 : facade : scope.size.x>5 ~ Subdiv(X, 1, 1r, 1r, 1){ T(Z,0.5) S( ZD, focc('occlusion', scope.shape.f , S(0.5,1.0)  ) ) stone | wall | Repeat( YS, 3 ) {window} | stone2 }
表示:当facade的scope.size.x>5时,对facade元素执行操作,沿X轴分成4份,对第1份执行T和S操作并产生一个叫stone的元素,第2份产生一个叫wall的元素,第3份继续操作,沿Y分成三份,每一份都产生一个叫window的元素,第四份产生一个叫stone2的元素。focc和S(0.5,1.0)都是python函数。

我用antlr制作的解释器问题就出在这里了,它无法区分CGA的S操作和python的S函数。其实这个人很好区分,一看是在CGA操作的参数中出现的,那一定是python函数;可是就是不知道这个规则在antlr中该怎么写。

论坛徽章:
0
25 [报告]
发表于 2010-01-02 23:28 |只看该作者

回复 #28 cobranail 的帖子

我不能完全理解你想解析的CGA语法是怎么样
但是我大致上推断
如果 fontprint 和 facade 是语法关键字的话
LR文法是可以解析出来的
你有没有试过在option里面添加 backtrack = true?

论坛徽章:
0
26 [报告]
发表于 2010-01-03 00:24 |只看该作者
关键字只有T,S,R,Comp,Snap,SnapLines,Subdiv,Repeat等,而且关键字只出现在~之后。
footprint相当于一个常量,通过执行后面的操作,被替换成另一个常量,cga就是一种编写替换规则的语言。
和L-system比较像,都是替换,简单的L-system就是上下文无关的。规则A->BA表示字符A替换成字符BA,如果初始字符是A,经过一次替换就是BA,经过第二次替换就是BBA,cga就和这个很相似,不同之处就是cga的替换有很复杂的条件,并且替换后还有操作。

我从这个论文上看到的语法。
http://www.vision.ee.ethz.ch/~pm ... 006.web-version.pdf

这个是我以前写antlr规则,我现在只记得当时改来改去都无法处理我说的那种情况,然后就一直扔着了。最后也忘了改了什么地方,生成不了代码了。
backtrace试过,现在只记得没成功。

[ 本帖最后由 cobranail 于 2010-1-3 00:37 编辑 ]

CGA.zip

2.92 KB, 下载次数: 9

论坛徽章:
0
27 [报告]
发表于 2010-01-05 21:21 |只看该作者

回复 #30 cobranail 的帖子

里面嵌入的操作代码太多了.....
看了好久看不出语法脉络.....

有个小疑惑: 你给的示例CGA代码真的能用这么简单的语法描述得好么...?

论坛徽章:
0
28 [报告]
发表于 2010-01-10 19:46 |只看该作者
联系我,希望研究编译器、解释器的加我,MSN:gugu8220@yahoo.com.cn,既要谈主义,又要写代码。

论坛徽章:
0
29 [报告]
发表于 2010-01-11 17:18 |只看该作者
写给Proj,
我这段时间在看龙芯,所以才那样说,我觉得你的脾气有点火爆,对于个人或者组织理性的做法是在自己可控制的能力范围内做一件事情,我接受你的建议,马上尝试加入lua,我比较喜欢这门小语言,但是lua的头头明确表示不会做编译器的,可能他认为时机不成熟吧,我的脾气很好,一般情况下可以容纳任何人。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP