我有一个简单的语法,它允许用户定义一些带有属性的对象。例如:
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!
;
但是可能没有定义强制属性。我可以添加一个额外的规则,比如强制属性定义,但是很难以任何顺序允许定义
那么这种检查应该是解析器还是树解析器的一部分