0

配列式をサポートする言語を構築するために、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>  

パーサーが最初の「大なり」記号に到達すると、それが比較ルールの一部なのか、内積ルールの終了タグなのかを区別できなくなります。
私は自分自身を明確にしたことを願っています。問題はわかっているのですが、解決できません。助けていただければ幸いです。

4

1 に答える 1