Пример #1
0
        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);
        }
Пример #2
0
        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);
        }