StringTemplate Grammars
StringTemplate Grammars
StringTemplate
has multiple grammars that describe templates at varying degrees of detail. At the grossest level of granularity, the group.g
grammar accepts a list of templates with formal template arguments. Each of these templates is broken up into chunks of literal text and attribute expressions via template.g
. The default lexer uses $...$
delimiters, but the angle.bracket.template.g
lexer provides <...>
delimiters. Each of the attribute expression chunks is processed by action.g
. It builds trees (ASTs) representing the operation indicated in the expression. These ASTs
represent the "precompiled" templates, which are evaluated by the tree grammar eval.g
each time a StringTemplate
is rendered to string with ToString()
.
The grammar files are:
group.g
: read a group file full of templatestemplate.g
: break an individual template into chunksangle.bracket.template.g
:<...>
template lexeraction.g
: parse attribute expressions into ASTseval.g
: evaluate expression ASTs duringToString()
Anything outside of the StringTemplate
start/stop delimiters is ignored.
A word about Strings. Strings are double-quoted with optional embedded escaped characters that are translated (escapes are not translated outside of strings; for example, text outside of attribute expressions do not get escape chars translated except \$
, \<
and \>
).
<< STRING : '"' (ESC_CHAR | ~'"')* '"' ; >>
The translated escapes are:
<< ESC_CHAR : '\\' ( 'n' | 'r' | 't' | 'b' | 'f' | '"' | '\\' ) ; >>
but other escapes are allowed and ignored.
Please see the actual grammar files for the formal language specification of StringTemplate
's various components.