0
私はXTextを使ってDSLを書いています。XTextルックバック付きDSL
A {
B, //this comma is needed
C,
D {E}, //comma is optional after a closing curly brace
F {G}
H
}
I,
J
それは種類のモデルとモデルクラスのリストが含まれているクラスによって表現されなければならない:私たちは、私はこのような何かを解析したいと仮定しましょう。私が現在持っているかどう
は次のとおりです。クラスはそれらがサブクラスを持つかどうかとは独立して、カンマで区切られなければならない場合、これは動作します
Model: (classes += Class)*
Class: name = ID ('{' (subclasses += Class) (',' subclasses += Class)* '}')?
。ただし、Classは中括弧で囲まれたサブクラスを持つことができるため、中括弧の後にカンマは必須ではありません。
これは、私は次のように表現する文法を必要とする意味:
Class: ID (',' Class | '{' subclasses += Class '}' ','? Class)?
私は含むルールを参照することはできませんので、クラスの内部クラスルールの参照が機能しません。私はこの問題のための単純な解決策があると私は確信しています。
編集:私はlookbehindが解決策であると信じます。しかし、これはXTextで支持されていないように思えます。
' {B {}} I'が許可されているが、 'A {}のような何かを試すことができます? –
私はちょうど 'ClassAtEnd'をオプションとして使用し、もう一つの時間は使用しないことを言いたいと思います。 –
良いキャッチ、あなたは正しいです –