Coco/R で dangling-else の問題があります。Coco/R のユーザー マニュアルを理解しようとしてGoogle に問い合わせましたが、自分で問題を解決できません。
問題を次の Coco/R 文法に簡略化しました ( に保存されていますnew4.atg
)。
COMPILER Expr
CHARACTERS
digit = '0'..'9'.
letter = 'A'..'Z'.
TOKENS
number = digit { digit }.
name = letter { digit | letter }.
PRODUCTIONS
Expr = Test | Id Test.
Test = Test2.
Test2=Id | "(" Test ")".
Id=IdName|IdNumber.
IdName = name.
IdNumber = number.
END Expr.
でコンパイラをビルドしたい場合、次のcoco.bat
答えが得られます。
Coco/R (Dec 22, 2014)
checking
new 4.atg(15,1): LL1 warning in Expr: number is start of several alternatives
new 4.atg(15,1): LL1 warning in Expr: name is start of several alternatives
parser + scanner generated
0 errors detected
Googleでの最良の結果では、ステートメントを宣言できることを読みましたIF(isXXXFollowYYY())
が、それが最善の解決策であるかどうか、方法はわかりません。(私の例では: Expr = Test | If(isTestFollowID)Id Test
. しかし、どこでisTestFollowID
宣言されていますか?)
起動時に警告を表示したくありませんcoco.bat
。