/**
 * Utils for pretty-printing SDF.
 */
module stratego/sdf/verbalize
imports
  stratego/asfix/signature
  Sdf2

strategies

  /**
   * @type Symbol -> List(String)
   */
  pp-sdf-symbol =
    rec x( 
      \ cf(sym)			-> <concat> [["<"], <x> sym, ["-CF>"]] \
    + \ lex(sym)                -> <concat> [["<"], <x> sym, ["-LEX>"]] \
    + \ empty()                 -> ["()"] \
    + \ seq(s,ss)               -> <concat> [["("], <map(x)> [s|ss], [")"]] \
    + \ opt(sym)                -> <x;at-end(!["opt"])> sym \
    + \ iter(sym)               -> <x;at-end(!["+"])> sym \
    + \ iter-star(sym)          -> <x;at-end(!["*"])> sym \
    + \ iter-sep(sym,sep)       -> <concat> [["{"], <x> sym, <x> sep, ["}+"]] \
    + \ iter-star-sep(sym,sep)  -> <concat> [["{"], <x> sym, <x> sep,["}*"]] \
    + \ func(ss,s)              -> <concat> [<filter(x);concat> ss, ["to"], <x> s] \
    + \ alt(s1,s2)              -> <concat> [<x>s1, ["|"], <x>s2] \
    + \ sort(str)               -> [str] \
    + \ lit(str)                -> [<try(un-double-quote; unescape)> str] \
    + \ label(str,_)		-> [<try(un-double-quote; unescape)> str] \
    + \ layout()                -> ["LAYOUT"] \
    )