配列式をサポートする言語を構築するために、Xtext を使用します。現時点では、数式をサポートするためのルールを作成しており、現在、行列の乗算 (内積) をサポートするためのルールを作成しようとしています。
数式のルールは、このスレッドで提案されているパターンに従います。ルールの中には、次の Compare ルールがあります。
Compare returns Expression:
Shift (({Gt.left=current} '>'| {Lt.left=current} '<') right=Shift)*
このルールの下には、異なる優先順位の演算子を含む Shift などの他のルールがあります。これらのルールはすべて、内積をサポートしたい式の有効なオペランドを宣言するアトミック ルールにつながります。
Atomic returns Expression:
{NumberLiteral} value=NUMBER|
{SymbolRef} symbol=[Symbol]|
...
{InnerPr}'<'vect=Expr ',' vect2=Expr '>';
これにより、左再帰が発生します。式を書くと
<x,y>-5>
パーサーが最初の「大なり」記号に到達すると、それが比較ルールの一部なのか、内積ルールの終了タグなのかを区別できなくなります。
私は自分自身を明確にしたことを願っています。問題はわかっているのですが、解決できません。助けていただければ幸いです。