我有一个简单的语法,它允许用户定义一些具有属性的对象。 例如:ANTLR - 检查语义/值的含义
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!
;
但后来强制性的属性可以不被定义。 我可以添加喜欢mandatoryattributedefinition额外的规则,但那么就很难允许以任何顺序定义
所以应这种检查的是解析器的一部分或树分析器
嘿巴特基尔斯,首先感谢您的帮助,在这两个线程!很快,我必须支付你;) 好吧,现在我为什么问这个问题? 我认为有很多不同的方法来做到这一点。问题是真正的问题。你说过你会在树解析器中检查双重定义。所以你应该在树上执行一些java代码并检查树分析器中的那些双重定义?延伸的同样的东西:“现有价值需要”的术语? 对于我来说,解析器应该做的事情和树解析器应该做的事情之间很难分开。 – Alexander