本文整理汇总了C#中Parser.ExpectToken方法的典型用法代码示例。如果您正苦于以下问题:C# Parser.ExpectToken方法的具体用法?C# Parser.ExpectToken怎么用?C# Parser.ExpectToken使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Parser
的用法示例。
在下文中一共展示了Parser.ExpectToken方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Parse
public static AstNode Parse(Parser.Parser parser)
{
parser.ExpectToken(TokenType.Identifier, "for");
parser.ExpectToken(TokenType.Parentheses, "(");
AstNode left = StatementNode.Parse(parser);
AstNode predicate = StatementNode.Parse(parser);
AstNode right = StatementNode.Parse(parser);
parser.ExpectToken(TokenType.Parentheses, ")");
AstNode forBody = StatementNode.Parse(parser);
return new ForNode(left, predicate, right, forBody);
}
示例2: Parse
public static AstNode Parse(Parser.Parser parser)
{
parser.ExpectToken(TokenType.Identifier, "foreach");
parser.ExpectToken(TokenType.Parentheses, "(");
AstNode needle = StatementNode.Parse(parser);
parser.ExpectToken(TokenType.Identifier, "in");
AstNode haystack = StatementNode.Parse(parser);
parser.ExpectToken(TokenType.Parentheses, ")");
AstNode forBody = StatementNode.Parse(parser);
return new ForEachNode(needle, haystack, forBody);
}
示例3: Parse
public static AstNode Parse(Parser.Parser parser)
{
CodeBlock block = new CodeBlock();
parser.ExpectToken(TokenType.Brace, "{");
while (!parser.EndOfStream && !parser.MatchToken(TokenType.Brace, "}"))
{
block.Children.Add(StatementNode.Parse(parser));
}
parser.ExpectToken(TokenType.Brace, "}");
return block;
}
示例4: Parse
public static ArrayIndexerNode Parse(Parser.Parser parser)
{
var ret = new ArrayIndexerNode();
parser.ExpectToken(TokenType.Bracket, "[");
while (!parser.MatchToken(TokenType.Bracket, "]"))
{
ret.Children.Add(ExpressionNode.Parse(parser));
}
parser.ExpectToken(TokenType.Bracket, "]");
return ret;
}
示例5: Parse
public static AstNode Parse(Parser.Parser parser)
{
parser.ExpectToken(TokenType.Identifier, "try");
AstNode tryBody = StatementNode.Parse(parser);
parser.ExpectToken(TokenType.Identifier, "catch");
AstNode catchBody = StatementNode.Parse(parser);
if (parser.AcceptToken(TokenType.Identifier, "finally"))
{
AstNode finallyBody = StatementNode.Parse(parser);
return new TryNode(tryBody, catchBody, finallyBody);
}
return new TryNode(tryBody, catchBody);
}
示例6: Parse
public static AstNode Parse(Parser.Parser parser)
{
parser.ExpectToken(TokenType.Identifier, "while");
parser.ExpectToken(TokenType.Parentheses, "(");
AstNode predicate = ExpressionNode.Parse(parser);
parser.ExpectToken(TokenType.Parentheses, ")");
AstNode whileBody = StatementNode.Parse(parser);
if (parser.AcceptToken(TokenType.Identifier, "else"))
{
AstNode elseBody = StatementNode.Parse(parser);
return new WhileNode(predicate, whileBody, elseBody);
}
return new WhileNode(predicate, whileBody);
}
示例7: Parse
public static AstNode Parse(Parser.Parser parser)
{
if (parser.MatchToken(TokenType.Identifier, "if"))
return IfNode.Parse(parser);
else if (parser.MatchToken(TokenType.Identifier, "while"))
return WhileNode.Parse(parser);
else if (parser.MatchToken(TokenType.Identifier, "for"))
return ForNode.Parse(parser);
else if (parser.MatchToken(TokenType.Identifier, "foreach"))
return ForEachNode.Parse(parser);
else if (parser.MatchToken(TokenType.Identifier, "try"))
return TryNode.Parse(parser);
else if (parser.MatchToken(TokenType.Identifier, "func"))
return FuncNode.Parse(parser);
else if (parser.MatchToken(TokenType.Identifier, "thread"))
return ThreadNode.Parse(parser);
else if (parser.MatchToken(TokenType.Identifier, "return"))
return ReturnNode.Parse(parser);
else if (parser.MatchToken(TokenType.Brace, "{"))
return CodeBlock.Parse(parser);
else
{
AstNode expr = ExpressionNode.Parse(parser);
parser.ExpectToken(TokenType.EndOfLine);
return expr;
}
}
示例8: Parse
public static ThreadNode Parse(Parser.Parser parser)
{
parser.ExpectToken(TokenType.Identifier, "thread");
AstNode node = StatementNode.Parse(parser);
return new ThreadNode(node);
}
示例9: Parse
public static ArgListNode Parse(Parser parser)
{
ArgListNode ret = new ArgListNode();
parser.ExpectToken(TokenType.Parentheses, "(");
while (!parser.MatchToken(TokenType.Parentheses, ")"))
{
ret.Children.Add(ExpressionNode.Parse(parser));
if (!parser.AcceptToken(TokenType.Comma))
break;
}
parser.ExpectToken(TokenType.Parentheses, ")");
return ret;
}
示例10: Parse
public static AstNode Parse(Parser parser)
{
parser.ExpectToken(Lexer.TokenType.Identifier, "PAUSE");
if (parser.MatchToken(Lexer.TokenType.String) || parser.MatchToken(Lexer.TokenType.Number))
return new PauseNode((string)parser.ReadToken().Value);
else
return new PauseNode("PRESS ANY KEY TO CONTINUE...");
}
示例11: Parse
public static ArrayInitializerNode Parse(Parser parser)
{
var ret = new ArrayInitializerNode();
parser.ExpectToken(TokenType.Bracket, "[");
while (!parser.MatchToken(TokenType.Bracket, "]"))
{
ret.Children.Add(ExpressionNode.Parse(parser));
if (!parser.AcceptToken(TokenType.Comma))
{
break;
}
}
parser.ExpectToken(TokenType.Bracket, "]");
return ret;
}
示例12: Parse
public static AstNode Parse(Parser.Parser parser)
{
parser.ExpectToken(TokenType.Identifier, "func");
string name = parser.ExpectToken(TokenType.Identifier).Value.ToString();
parser.ExpectToken(TokenType.Parentheses, "(");
List<string> result = new List<string>();
while (parser.MatchToken(TokenType.Identifier))
{
result.Add(parser.ExpectToken(TokenType.Identifier).Value.ToString());
if (!parser.AcceptToken(TokenType.Comma))
break;
}
parser.ExpectToken(TokenType.Parentheses, ")");
AstNode body = StatementNode.Parse(parser);
return new FuncNode(name, result, body);
}
示例13: Parse
public static AstNode Parse(Parser parser)
{
parser.ExpectToken(Lexer.TokenType.Identifier, "IF");
AstNode predicate = ExpressionNode.Parse(parser);
AstNode body = StatementNode.Parse(parser);
if (parser.MatchToken(Lexer.TokenType.Identifier, "ELSE"))
return new ConditionalNode(predicate, body, StatementNode.Parse(parser));
return new ConditionalNode(predicate, body);
}
示例14: Parse
public static AstNode Parse(Parser parser)
{
parser.ExpectToken(Lexer.TokenType.Identifier, "GOTO");
AstNode position = ExpressionNode.Parse(parser);
if (position is NumberNode)
return new GotoNode(Convert.ToString(((NumberNode)position).Value));
else if (position is IdentifierNode)
return new GotoNode(((IdentifierNode)position).Identifier);
else
throw new Exception("Unknown type " + parser.CurrentToken().TokenType + " " + parser.CurrentToken().Value);
}
示例15: Parse
public static AstNode Parse(Parser parser)
{
parser.ExpectToken(Lexer.TokenType.Identifier, "CLS");
return new ClsNode();
}