C# 反讽语言工具包-FreeTextLiteral用法

C# 反讽语言工具包-FreeTextLiteral用法,c#,irony,C#,Irony,我们对文本模板有一些特殊要求,这些要求无法通过任何通用软件包(T4、NVelocity、StringTemplate..)解决。因此,我们决定用反讽的方式尝试自己的方法 给定一个简单的形式,其中标记中的任何内容都是表达式,否则就是文本文本: Hi <% u.FirstName %> This is some template text. Hi这是一些模板文本。 我从这个开始: // Terminals var text = new FreeTextLiteral("FreeTex

我们对文本模板有一些特殊要求,这些要求无法通过任何通用软件包(T4、NVelocity、StringTemplate..)解决。因此,我们决定用反讽的方式尝试自己的方法

给定一个简单的形式,其中标记中的任何内容都是表达式,否则就是文本文本:

Hi <% u.FirstName %> This is some template text.
Hi这是一些模板文本。
我从这个开始:

// Terminals
var text = new FreeTextLiteral("FreeTextLiteral", FreeTextOptions.AllowEof | FreeTextOptions.ConsumeTerminator, "<");
text.Escapes.Add(@"\<", "<");

var identifierTerminal = new IdentifierTerminal("identifierTerminal");
var expressionStart = new KeyTerm("%", "ExpressionStart");
var expressionEnd = new KeyTerm("%>", "ExpressionEnd");

// Non terminals
var statement = new NonTerminal("Statement");
var template = new NonTerminal("Template", typeof(StatementListNode));
var expression = new NonTerminal("Expression", typeof(ExpressionListNode));
var memberExpression = new NonTerminal("MemberExpression");

// Rules              
statement.Rule = text | expression;
expression.Rule = expressionStart + memberExpression + expressionEnd;
memberExpression.Rule = identifierTerminal + "." + identifierTerminal;
template.Rule = MakePlusRule(template, null, statement);
//终端
var text=new FreeTextLiteral(“FreeTextLiteral”,FreeTextOptions.AllowEof | FreeTextOptions.consumerterminator,”