Excelの式を解析するには、範囲交差のルールが必要です。たとえば は:演算子が空白(2つの式の間のスペース)の場合、ANTLR3に "exp(PLUS^exp)*"を書くには
= SUM(A1:C4 B2:D3)`
にExcelで等価である:
= SUM(B2:C3)
(2つの領域の交点)
ルールがある:
range (range)*
しかし私ができますで実際のレクサートークンを使ってそれを行う方法しか見つけなかったので、ツリー部分を書く方法を見つけることはできません
range (PLUS^ range)*
が、他の場所でスペース文字が空白のみであるため、ここでのINTERSECTトークンは、任意のものである:オペレータは、追加のためのように、それは次のようになります。
私は->
ツリー構文を使用する必要があると思いますが、シンタックスのrange (PLUS^ range)*
と同等のものを書く方法は、ANTLR3ガイドまたはウェブでは見つかりません。ここで は私の現在の試みです:
range (range {hasIntersect=true})*
-> {hasIntersect}? ^(INTERSECT range*)
-> range
私はA1:C4 B2:D3
のために動作しますが、それは他の操作の場合と同じようA1:C4 B2:D3 B1:B6
のために、それは、2人の子供それぞれに3人の子供の代わりに、2本のINTERSECTの木が1 INTERSECTツリーを生成します。それが効果的に再帰的な構造を構築するよう
そして、私は唯一のコースの2人の子供を持っている木を必要とする...
パーフェクト。すべての単体テストは現在通過しています:) パリのおかげで、ルール属性をツリー属性として使うことはできません。 –