ここでバート・キアーズのコメントに記載されている文法を見ると、このコメントを見ることができます、
この文法を定義する際に直面した主な課題は次のとおりです。
-1-乗法式および正規表現リテラルに関連するDIV記号を取り巻くあいまいさ。これは、いくつかのレクサー駆動型の魔法で解決されます。ゲートされたセマンティック述語は、RegularExpressionsEnabledプロパティの値に基づいて、正規表現の認識をオンまたはオフにします。正規表現を有効にすると、除算式よりも優先されます。正規表現を有効にするかどうかの決定は、前のトークンを除算の左側のオペランドの最後のトークンと見なすことができるというヒューリスティックに基づいています。
..。
areRegularExpressionsEnabled()関数は、次のように定義されます。
private final boolean areRegularExpressionsEnabled()
{
if (last == null)
{
return true;
}
switch (last.getType())
{
// identifier
case Identifier:
// literals
case NULL:
case TRUE:
case FALSE:
case THIS:
case OctalIntegerLiteral:
case DecimalLiteral:
case HexIntegerLiteral:
case StringLiteral:
// member access ending
case RBRACK:
// function call or nested expression ending
case RPAREN:
return false;
// otherwise OK
default:
return true;
}
}
そして、この関数はRegularExpressionLiteral式で使用されます。
RegularExpressionLiteral
: { areRegularExpressionsEnabled() }?=> DIV RegularExpressionFirstChar RegularExpressionChar* DIV IdentifierPart*
;