var_expand_grammar その2

var_expand_grammarをいくつかの修飾子に対応させました。
今日の成果物


修飾子は変数を展開するときに適用されるフィルタのようなもので、

X = abc ;
ECHO $(X:U) ; # 「ABC」を出力

のように使います。


実装した修飾子は以下の通りです。

  • [n]、[n-]、[n-m] (要素の選択)
  • :P (親ディレクトリの選択)
  • :U (大文字に変換)
  • :L (小文字に変換)
  • :G (グリストを選択)
  • :G=grist (グリストを置換)


実装で躓いたのは次の箇所です。

index_range
    =   '['
        >> uint_p
        [
            index_range.lower = index_range.upper = arg1
        ]

これを最初、

index_range
    =   '['
        >> uint_p
        [
            index_range.lower = arg1,
            index_range.upper = arg1
        ]

と書いていたのですが、セマンティックアクションでarg1が二度以上使われていると結果がおかしくなるようです。
この場合、uint_pの入力に関わらず固定値が返ってきました。
まぁ、多分動かないだろうとは思っていたんですけどね。