私は、ユーザーが属性を持ついくつかのオブジェクトを定義できるようにする単純な文法を持っています。例えば:
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
「2台目の駐車場」がすでに存在するかどうかを確認するにはどうすればよいですか?
さらに、色などの属性の一部をオプションにし、他の属性を必須にし、順序は重要ではないようにします
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!
;
ただし、必須属性は定義されていない可能性があります。必須の属性定義のようなルールを追加することはできますが、その場合、任意の順序で定義を許可するのは困難です。
したがって、この種のチェックはパーサーまたはツリーパーサーの一部である必要があります