private void ParseFunction(AccessLevel accessLevel, bool isStatic) { Token name = _lexer.Eat(TokenType.Identifer); Token openParen = _lexer.Eat(TokenType.OpenParen); //参数 List <DefineVariableNode> parms = new List <DefineVariableNode>(); if (!_lexer.Match(")")) { do { _lexer.Match(TokenType.Identifer); //TODO:使用Match函数报错 DefineVariableNode variable = ParseDefineVariable(out AssignNode assign, false); if (assign != null) { return; //TODO:报错 没有赋值 } parms.Add(variable); if (_lexer.Match(")")) { break; } } while (_lexer.MatchNow(",")); } if (!_lexer.Match(")")) { return; //TODO:报错 意外的符号 } Token closeParen = _lexer.Eat(TokenType.CloseParen); //返回值 Token colon = null, returnToken = null; string returnName = "void"; if (_lexer.Match(":")) { colon = _lexer.Eat(TokenType.Colon); if (_lexer.Match(TokenType.Identifer)) { returnToken = _lexer.Eat(TokenType.Identifer); returnName = returnToken.Content; } else { return; //TODO:使用Match函数报错 } } FunctionDefinition function; if (_parsingStructure is InterfaceDefinition) { if (_lexer.Match("{")) { return; //TODO:报错 接口成员不能有定义 } _lexer.MatchNow(";"); //TODO:使用Match函数报错 function = new FunctionDefinition(name, openParen, closeParen, colon, returnToken, returnName, null, null, _parsingStructure, parms, null, accessLevel, false); _parsingStructure.AddFunction(function); return; } ChunkNode chunkNode = ParseChunk(s_commonOrder, out Token openBrace, out Token closeBrace); function = new FunctionDefinition(name, openParen, closeParen, colon, returnToken, returnName, openBrace, closeBrace, _parsingStructure, parms, chunkNode, accessLevel, isStatic); _parsingStructure.AddFunction(function); }