FnBracket parseFnMuArg() { FnBracket marg = new FnBracket(); marg.LeftBracketToken = CurrentToken; MoveNext(); while (!isBracketEnd(CurrentKind)) { FnArg sarg = parseFnArg(); if (sarg != null) { marg.Args.Add(sarg); } if (CurrentKind == TokenKind.Comma) { MoveNext(); } } if (CurrentKind == TokenKind.RBS) { marg.RightBracketToken = CurrentToken; MoveNext(); } else { error("括号不匹配"); } return(marg); }
FnName parseFnName() { FnName fname = new FnName(); var curline = CurrentToken.Line; while (CurrentToken.Kind != TokenKind.EOF && curline == CurrentToken.Line) { if (CurrentKind == TokenKind.LBS) { FnBracket arg = parseFnMuArg(); if (arg != null) { fname.NameTerms.Add(arg); } } else if (CurrentKind == TokenKind.Ident) { FnText textt = parseFnText(); if (textt != null) { fname.NameTerms.Add(textt); } } else if (CurrentKind == TokenKind.AssignTo) { if (fname.NameTerms == null || fname.NameTerms.Count == 0) { error("过程没有名称"); MoveNext(); } else { MoveNext(); if (/*CurrentToken.IsAtomData()||*/ CurrentKind == TokenKind.Ident) { fname.RetToken = CurrentToken; MoveNext(); } else { error("错误的过程结果"); MoveNext(); } } } else { error("错误的过程名称"); MoveNext(); } } return(fname); }