ometa PrettyC <: Parser { Name = (letter+):n -> n.join(''), TypeName = (Name:n "::" TypeName:t) -> n + '::' + t | Name, Type = Type:t "*" -> t + " *" | Type:t "&" -> t + " &" | Type:t "const" -> t + " const" | Type:t "volatile" -> t + " volatile" | TypeName, ClassName = Name:n "::" -> n + "::" | empty -> "TODO::", FuncName = Name, Param = Type:t Name:n -> t + " " + n, Params = Param:p ("," Param)*:ps -> p + ",\n" + ps.join(",\n"), test = Type:t ClassName:cn FuncName:fn "(" Params:ps "\n)" "{" Code:cd "}" -> t + " " + cn + fn + "\n(" + ps + ")/n{/n" + cd + "\n}" } Transcript.show( PrettyC.matchAll(" butts ", "test") )