Package xyz.cofe.text.template
Class TemplateParser
java.lang.Object
xyz.cofe.text.template.TemplateParser
public class TemplateParser
extends java.lang.Object
Парсер шаблонов.
Синтаксис:
Синтаксис:
Правила
start ::= startAnyChar
| startCodeBegin
| startEscape
.
startAnyChar ::= startText start
| startText
.
startText ::= anyChar | blockBegin | blockEnd .
startCodeBegin ::= code start
| code
.
startEscape ::= escape start
| escape
.
code ::= codeBegin blockBody blockEnd .
blockBody ::= anyChar blockBody
| anyChar
| escape blockBody
| escape
| block blockBody
| block
.
block ::= blockBegin blockBody blockEnd .
Лексемы
Лексемы перечисле в порядке уменьшения приоритета
escape ::= \$ # интерпретирует как $
| \\ # интерпретирует как \
| \${ # интерпретирует как ${
.
codeBegin ::= ${ .
blockBegin ::= { .
blockEnd ::= } .
anyChar # любой символ кроме выше указанных лексем
- Author:
- Kamnev Georgiy (nt.gocha@gmail.com)
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected classTemplateParser.Mapping<K,V> -
Field Summary
Fields Modifier and Type Field Description protected java.lang.String[]blockBeginLexemsprotected java.lang.String[]blockEndLexemsprotected java.lang.String[]codeBeginLexemsprotected java.util.LinkedHashMap<java.lang.String,java.lang.String>currentEscapeRewriteMapprotected java.lang.String[]escapeLexemsprotected java.util.LinkedHashMap<java.lang.String,java.lang.String>escapeRewriteMapprotected xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,AstNode>start_anyprotected xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,AstNode>start_codeprotected xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,AstNode>start_escapeprotected java.util.Map<java.lang.String,xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,AstNode>>start_patterns -
Constructor Summary
Constructors Constructor Description TemplateParser() -
Method Summary
Modifier and Type Method Description protected java.util.LinkedHashMap<java.lang.String,java.lang.String>createEscapeRewriteMap()<ResultType, EvalCode, EvalText>
xyz.cofe.fn.Fn0<ResultType>eval(AstNode tree, xyz.cofe.fn.Fn1<java.lang.String,EvalText> evalText, xyz.cofe.fn.Fn1<java.lang.String,EvalCode> evalCode, xyz.cofe.fn.Fn0<ResultType> initResult, xyz.cofe.fn.Fn2<ResultType,EvalText,ResultType> appendText, xyz.cofe.fn.Fn2<ResultType,EvalCode,ResultType> appendCode)Обход шаблона (AST дерева) и форматирование сообщенияxyz.cofe.fn.Fn0<java.lang.String>evalAndPrint(AstNode tree, xyz.cofe.fn.Fn1<java.lang.String,java.lang.String> evalCode)Обход шаблона (AST дерева) и форматирование сообщенияxyz.cofe.fn.Fn0<java.lang.String>evalAndPrint(AstNode tree, xyz.cofe.fn.Fn1<java.lang.String,java.lang.String> evalText, xyz.cofe.fn.Fn1<java.lang.String,java.lang.String> evalCode)Обход шаблона (AST дерева) и форматирование сообщенияprotected java.lang.String[]getBlockBeginLexems()protected java.lang.String[]getBlockEndLexems()protected java.lang.String[]getCodeBeginLexems()protected java.lang.String[]getEscapeLexems()protected java.util.LinkedHashMap<java.lang.String,java.lang.String>getEscapeRewriteMap()protected <K, V> TemplateParser.Mapping<K,V>map(K k, V v)AstNodeparse(java.lang.String source)Парсинг шаблона и формирование соответ AST дереваprotected AstNodestart(xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token> ptr)
-
Field Details
-
escapeRewriteMap
protected java.util.LinkedHashMap<java.lang.String,java.lang.String> escapeRewriteMap -
codeBeginLexems
protected java.lang.String[] codeBeginLexems -
escapeLexems
protected java.lang.String[] escapeLexems -
blockBeginLexems
protected java.lang.String[] blockBeginLexems -
blockEndLexems
protected java.lang.String[] blockEndLexems -
currentEscapeRewriteMap
protected java.util.LinkedHashMap<java.lang.String,java.lang.String> currentEscapeRewriteMap -
start_code
protected final xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,AstNode> start_code -
start_any
protected final xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,AstNode> start_any -
start_escape
protected final xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,AstNode> start_escape -
start_patterns
protected final java.util.Map<java.lang.String,xyz.cofe.fn.Fn1<xyz.cofe.collection.Pointer<xyz.cofe.text.lex.Token>,AstNode>> start_patterns
-
-
Constructor Details
-
TemplateParser
public TemplateParser()
-
-
Method Details
-
getEscapeRewriteMap
protected java.util.LinkedHashMap<java.lang.String,java.lang.String> getEscapeRewriteMap() -
createEscapeRewriteMap
protected java.util.LinkedHashMap<java.lang.String,java.lang.String> createEscapeRewriteMap() -
getCodeBeginLexems
protected java.lang.String[] getCodeBeginLexems() -
getEscapeLexems
protected java.lang.String[] getEscapeLexems() -
getBlockBeginLexems
protected java.lang.String[] getBlockBeginLexems() -
getBlockEndLexems
protected java.lang.String[] getBlockEndLexems() -
eval
public <ResultType, EvalCode, EvalText> xyz.cofe.fn.Fn0<ResultType> eval(AstNode tree, xyz.cofe.fn.Fn1<java.lang.String,EvalText> evalText, xyz.cofe.fn.Fn1<java.lang.String,EvalCode> evalCode, xyz.cofe.fn.Fn0<ResultType> initResult, xyz.cofe.fn.Fn2<ResultType,EvalText,ResultType> appendText, xyz.cofe.fn.Fn2<ResultType,EvalCode,ResultType> appendCode)Обход шаблона (AST дерева) и форматирование сообщения- Type Parameters:
ResultType- Результирующий тип данныхEvalCode- Тип данных в результате вычисления кода в внутри шаблонаEvalText- Тип данных в результате вычисления текста в внутри шаблона- Parameters:
tree- AST дерево шаблона (результат парсинга шаблона)evalText- функция вычисления текстаevalCode- функция вычисления кода (вставок в шаблон ${})initResult- функция начального результирующего значенияappendText- функция сумирования результирующего значения и текстаappendCode- функция сумирования результирующего значения и кода- Returns:
- Результирующее значение
-
evalAndPrint
public xyz.cofe.fn.Fn0<java.lang.String> evalAndPrint(AstNode tree, xyz.cofe.fn.Fn1<java.lang.String,java.lang.String> evalCode)Обход шаблона (AST дерева) и форматирование сообщения- Parameters:
tree- AST дерево шаблона (результат парсинга шаблона)evalCode- функция вычисления кода (вставок в шаблон ${})- Returns:
- Результирующее значение
-
evalAndPrint
public xyz.cofe.fn.Fn0<java.lang.String> evalAndPrint(AstNode tree, xyz.cofe.fn.Fn1<java.lang.String,java.lang.String> evalText, xyz.cofe.fn.Fn1<java.lang.String,java.lang.String> evalCode)Обход шаблона (AST дерева) и форматирование сообщения- Parameters:
tree- AST дерево шаблона (результат парсинга шаблона)evalText- функция вычисления текстаevalCode- функция вычисления кода (вставок в шаблон ${})- Returns:
- Результирующее значение
-
parse
Парсинг шаблона и формирование соответ AST дерева- Parameters:
source- шаблон- Returns:
- AST дерево
-
map
-
start
-