基本的にすべて大文字の文字列である定数に一致させたい。
また、小文字と大文字が混在する可能性のある識別子を照合したいと考えています。
Start
= Constant
/ Identifier
Identifier
= h:[A-Za-z_] t:[a-zA-Z0-9_]* { return { type: 'IDENTIFIER', value: h + t.join('') } }
Constant
= h:[A-Z] t:[A-Z_0-9]* { return { type: 'CONSTANT', value: h + t.join('') } }
問題は、一致しようとするとAsd
、次のように表示されることです。Line 1, column 2: Expected [A-Z_0-9] or end of input but "s" found.
定数ルールに一致するようですが、失敗しても識別子ルールにスワップしません...
問題は、定数も有効な識別子であるように思われますが、あいまいさを解消するルールを理解できません。定数の一致が失敗した場合は、識別子ルールを試してみるべきだと思います...