可能な限り少ないコピー/貼り付けで、コンテキストに応じてルールを変更しようとしています。私が達成しようとしていることの擬似コードの変形から始めるのが最善です:
module[boolean isParam]: 'module' id=identity?
declaration+
update+
'endmodule' -> ^(MODULE ({if (isParam)} IS_PARAMETER {else} $id) declaration+ update+);
が設定されている場合、モジュールをルールisParam
に一致させず、代わりにトークンを作成します。これは2つの別々のルールで実行できると確信していますが、コードの重複を減らしたり、ルールをいくつかの小さなルールに分割したりせずに、よりクリーンな方法はありますか?identity
IS_PARAMETER
module
module