本文整理汇总了C#中TokenStream.PushState方法的典型用法代码示例。如果您正苦于以下问题:C# TokenStream.PushState方法的具体用法?C# TokenStream.PushState怎么用?C# TokenStream.PushState使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TokenStream
的用法示例。
在下文中一共展示了TokenStream.PushState方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ParseComplexString
public static Ast.ComplexString ParseComplexString(TokenStream Stream, ParseContext Context)
{
System.Diagnostics.Debug.Assert(Stream.Next().Type == TokenType.Dollar);
var start = Stream.Next();
Stream.PushState(TokenStreamState.ComplexString); //Enter complex string parsing mode
Stream.Advance();
if (Stream.Next().Type != TokenType.ComplexStringQuote)
throw new CompileError("[015] Expected \"", Stream);
Stream.Advance();
var stringPieces = new List<Ast.Node>();
while (Stream.Next().Type != TokenType.ComplexStringQuote)
{
if (Stream.Next().Type == TokenType.ComplexStringPart)
{
stringPieces.Add(new Ast.StringLiteral(Stream.Next(), Stream.Next().Value));
Stream.Advance();
}
else if (Stream.Next().Type == TokenType.OpenBracket)
{
Stream.PushState(TokenStreamState.Normal); //Make sure we are parsing normally for the
Stream.Advance(); //Skip the [ //embedded expression
stringPieces.Add(ParseExpression(Stream, Context, TokenType.CloseBracket));
if (Stream.Next().Type != TokenType.CloseBracket) //Shouldn't be possible
throw new CompileError("[016] Expected ]", Stream);
Stream.PopState(); //Return to complex string parsing mode
Stream.Advance();
}
else
throw new InvalidProgramException();
}
Stream.PopState(); //Return to normal parsing mode
Stream.Advance();
return new Ast.ComplexString(start, stringPieces);
}