ツリー・グラフ変換ルールは、
「単位構文のid」「単位構文のリスト表現」「変換ルールの本体」の三つ組で
構成されます。「単位構文のid」「単位構文のリスト表現」の
スケルトンは自動生成出来ます。「変換ルールの本体」のヒントも
同時に自動生成出来ます。

ツリー・グラフ変換ルールの作成部分例 (1)

block_stat:
(
  (
    "{}*",
    (
      "block_stat_n",
      (
        (
          "{}",
          ("block"),
          ("if"),
          ("switch"),
          ("label"),
          ("for"),
          ("while"),
          ("do"),
          ("continue"),
          ("break"),
          ("return"),
          ("stat_sync"),
          ("try"),
          ("throw"),
          ("stat_var_dcl"),
          ("stat_exp"),
          ("stat_colon")
        )
      )
    )
  )
)
attr_grmr {
  loop1(stat, n) :- for($[1]) == 1   , ("block") == stat [ -/n/-> $[1][1] ], ! loop1(stat, n + 1) .
  loop1(stat, n) :- for($[1]) == null, ("block") == stat, must_be(dst_node(stat, n), null) == 1 .

  loop1($$, 1) .
}

ツリー・グラフ変換ルールの作成部分例 (2)

e_cmp:
(("e_sft"), ("{}?", ("e_cmp_1", (("{}", ("ge"), ("gt"), ("le"), ("lt"), ("instanceof")), ("e_sft")))))
attr_grmr {
  op(">=")         :- switch($[2][1]) == "ge" .
  op(">" )         :- switch($[2][1]) == "gt" .
  op("<=")         :- switch($[2][1]) == "le" .
  op("<" )         :- switch($[2][1]) == "lt" .
  op("instanceof") :- switch($[2][1]) == "instanceof" .

  if1(exp, exp1) :- if($[2]) == 1   , op(op), ("binary") == exp [ -/"op"/-> op ]
                                                                [ -/"exp1"/-> exp1 ]
                                                                [ -/"exp2"/-> $[2][2] ] .
  if1(exp, exp ) :- if($[2]) == null .

  if2(exp) :- $gen == 1, ("binary") == exp [ -/"op"/-> op ],
      op != ">=", op != ">", op != "<=", op != "<", op != "instanceof", if($[2]) == null, exp === $[1] .
  if2(exp) :- if1(exp, $[1]) .

  if2($$) .
}