【发布时间】:2011-09-06 07:30:56
【问题描述】:
我有一个简单的语法,它允许用户定义一些带有属性的对象。 例如:
carpark : my carpark
lots: 100
car: BMW
color: red
wheels: 4
motocycle
age: 4
color: red
carpark : my second carpark
car:...
...
car:...
...
...
我用 ANTLR 创建了一个语法来检查那些简单的分配。
现在我在检查分配的顺序或含义时遇到问题。 假设我可以从现有停车场继承
carpark: my third carpark
extends: my second carpark
我应该如何检查“我的第二个停车场”是否已经存在?
此外,我希望某些属性(例如颜色)是可选的,其他属性是强制性的,并且顺序不应该很重要
car: BMW
color: red
age: 4
//should be allowed as
car: BMW
age: 4
color: red
一个简单的规则是
cardefinition
: CAR COLON value NEWLINE attributedefinition*
;
attributedefinition
: attributekey COLON value NEWLINE!
;
但是可能没有定义强制属性。 我可以添加一个额外的规则,比如强制属性定义,但是很难以任何顺序允许定义
所以这种检查应该是解析器或树解析器的一部分
【问题讨论】:
-
嘿 Bart Kiers,首先感谢您在两个线程中的帮助!很快我就得付钱给你了;)好吧,现在我为什么要问这个问题?我认为有很多不同的方法可以做到这一点。问题是什么才是真正合适的。你说你会在你的树解析器中检查双重定义。所以你会实现一些java代码通过树并检查树解析器中的那些双重定义?与扩展相同的事情:“需要的现有价值”一词?我很难区分解析器应该做的事情和树解析器应该做的事情。
标签: parsing antlr semantic-analysis