本文整理汇总了C#中ScriptEngine.BuildTokensAdvanced方法的典型用法代码示例。如果您正苦于以下问题:C# ScriptEngine.BuildTokensAdvanced方法的具体用法?C# ScriptEngine.BuildTokensAdvanced怎么用?C# ScriptEngine.BuildTokensAdvanced使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ScriptEngine
的用法示例。
在下文中一共展示了ScriptEngine.BuildTokensAdvanced方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Build
public override Token Build(Token lastToken, ScriptEngine engine, Script script, ref SourceCode sourceCode)
{
// if (condition) { ... } [else [if (condition) { ... }] { ... }]
var ifStatement = new Statement();
sourceCode.SeekToNext('(');
ifStatement.Condition = engine.BuildTokensAdvanced(ref sourceCode, ref script, new[] {')'});
sourceCode++;
sourceCode.SeekToNext('{');
ifStatement.Code = engine.BuildLongTokens(ref sourceCode, ref script, new[] {'}'});
sourceCode++;
var elseIfStatements = new List<Statement>();
Statement elseStatement = null;
while ((++sourceCode).Peek() == 'e')
{
bool isElseIf = false;
sourceCode.SeekToNext('e');
sourceCode += 4;
var s = new Statement();
if (sourceCode.Peek() == 'i')
{
isElseIf = true;
// Get the condition;
sourceCode.SeekToNext('i');
sourceCode++;
sourceCode.SeekToNext('(');
s.Condition = engine.BuildTokensAdvanced(ref sourceCode, ref script, new[] {')'});
sourceCode++;
}
sourceCode.SeekToNext('{');
s.Code = engine.BuildLongTokens(ref sourceCode, ref script, new[] {'}'});
sourceCode++;
if (isElseIf)
{
elseIfStatements.Add(s);
}
else
{
elseStatement = s;
}
}
return new IfToken(ifStatement, elseIfStatements, elseStatement);
}
示例2: Build
public override Token Build(Token lastToken, ScriptEngine engine, Script script, ref SourceCode sourceCode)
{
while ((++sourceCode).SpecialChar)
{
}
if (sourceCode.Peek() != '{')
{
sourceCode.Throw(String.Format("Error parsing a 'do' statement, expected a '{' but got '{0}' instead.",
sourceCode.Peek()));
}
List<List<List<Token>>> code = engine.BuildLongTokens(ref sourceCode, ref script, new[] {'}'});
if (!sourceCode.SeekToNext("while"))
{
sourceCode.Throw("Error parsing a 'do' statement, was expecting a 'while' after the { } block.");
}
if (!sourceCode.SeekToNext('('))
{
sourceCode.Throw("Error parsing a 'do' statement, was expecting a '(' after 'while'.");
}
List<List<Token>> exitCondition = engine.BuildTokensAdvanced(ref sourceCode, ref script, new[] {')'});
return new DoWhileToken(code, exitCondition);
}
示例3: Build
public override Token Build(Token lastToken, ScriptEngine engine, Script script, ref SourceCode sourceCode)
{
// while (condition) { /* Code */ }
sourceCode += 4; // The +1 comes from below.
while ((++sourceCode).SpecialChar)
{
}
if (sourceCode.CurrentCode != '(')
{
sourceCode.Throw("Error parsing a 'while' statement, was epexting a '(' after 'while'.");
}
List<List<Token>> exitCondition = engine.BuildTokensAdvanced(ref sourceCode, ref script, new[] {')'});
if (!sourceCode.SeekToNext('{'))
{
sourceCode.Throw(String.Format("Unexpected char: '{0}'", sourceCode.CurrentCode));
}
List<List<List<Token>>> code = engine.BuildLongTokens(ref sourceCode, ref script, new[] {'}'});
return new WhileLoopToken(exitCondition, code);
}
示例4: Build
public override Token Build(Token lastToken, ScriptEngine engine, Script script, ref SourceCode sourceCode)
{
// for (init; condition; increment) { /* Code */ }
sourceCode += 3; // Skip past the "for".
while (char.IsWhiteSpace(sourceCode.CurrentCode))
{
sourceCode++; // Offset until we reach a non-whitespace character.
}
if (sourceCode.CurrentCode != '(')
{
throw new Exception("Error parsing a 'for' statement, was expecting a '(' after 'for'");
}
// Otherwise, moving along!
List<List<Token>> forInit = engine.BuildTokensAdvanced(ref sourceCode, ref script, new[] {';'});
sourceCode++;
// We can then build the exitCondition
List<List<Token>> endCondition = engine.BuildTokensAdvanced(ref sourceCode, ref script, new[] {';'});
sourceCode++;
// And then the increment condition.
List<List<Token>> incrementStatement = engine.BuildTokensAdvanced(ref sourceCode, ref script,
new[] {';', ')'});
if (!sourceCode.SeekToNext('{'))
{
throw new Exception("Unexpected char: " + sourceCode.CurrentCode);
}
List<List<List<Token>>> code = engine.BuildLongTokens(ref sourceCode, ref script, new[] {'}'});
sourceCode++;
return new ForLoopToken(forInit, endCondition, incrementStatement, code);
}