LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1049|回复: 2

有熟悉antlr的吗?

[复制链接]
发表于 2009-4-28 19:45:00 | 显示全部楼层 |阅读模式
如何设置规则的优先级别?
最近的一个项目里需要实现一个shape grammar的解释器,语法规则比较特别。
T是其中的一个关键字,用法是T(param)。param是python语句。比如T(1.0, w, h),表示scope设置为1,w,h;T(math.cos(1.0), random.random()),表示math.cos(1.0)和random.random()由python解释后,将返回值设置成scope。
关键字还有很多,现在的问题是,如何保证类似T(),Comp()关键字这类语句不会被当作python语句。用AST貌似不行,还是被当作python语句匹配。我想用规则的优先级别来试试。
发表于 2009-4-29 17:17:45 | 显示全部楼层
用AST应该可以吧。
把注入T,Comp作为AST的Root,将括号中的东西当成AST的leaves。然后用TreeParser将AST的leaves输出成Python可以识别的语言。
应该是可以的,但这样的做法实际上是将T(math.cos(1.0), random.random())这种语言翻译成了Python的语法,不知道你想做的是否是这样。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-1 16:47:07 | 显示全部楼层
只有最外面的一层的当作sg解释,里面的都当作python语句。不过现在问题解决了。
不用ast也可以,单独处理括号,把关键字做单独的token就可以了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表