示例#1
0
            public static syntax parseV(syntax str) //V -> (E) | id | numb
            {
                switch (str.Lexems.FirstOrDefault().TokType)
                {
                case "Lparen":
                    str.tree(str.Lexems.FirstOrDefault().TokType, str.Lexems.FirstOrDefault().Value);
                    str.Lexems.RemoveAt(0);
                    syntax resLp = parseE(str);

                    switch (resLp.Lexems.FirstOrDefault().TokType)
                    {
                    case "Rparen":
                        str.tree(str.Lexems.FirstOrDefault().TokType, str.Lexems.FirstOrDefault().Value);
                        resLp.Lexems.RemoveAt(0);
                        return(resLp);

                    default:
                        Console.WriteLine(" Error - nonexistent )");
                        break;
                    }
                    return(resLp);

                case "Identifier":
                    str.Results.Add(str.Lexems.FirstOrDefault().Value);
                    str.Lexems.RemoveAt(0);
                    return(str);

                case "Number":
                    str.Results.Add(str.Lexems.FirstOrDefault().Value);
                    str.Lexems.RemoveAt(0);
                    return(str);

                case "Operator":
                    if (str.Lexems.First().Value == "-")
                    {
                        str.Results.Add("-" + str.Lexems.FirstOrDefault().Value);
                        str.Lexems.RemoveAt(0);
                        return(str);
                    }
                    return(str);

                default:
                    break;
                }
                return(str);
            }
示例#2
0
            public static syntax parseT1(syntax str) //T' -> *FT' | /FT' | пусто
            {
                switch (str.Lexems.FirstOrDefault().Value)
                {
                case "*":
                    str.tree(str.Lexems.FirstOrDefault().TokType, str.Lexems.FirstOrDefault().Value);
                    str.Lexems.RemoveAt(0);
                    return(parseT1(parseF(str)));

                case "/":
                    str.tree(str.Lexems.FirstOrDefault().TokType, str.Lexems.FirstOrDefault().Value);
                    str.Lexems.RemoveAt(0);
                    return(parseT1(parseF(str)));

                default:
                    return(str);    //Возвращаем то же самое выражение
                }
            }
示例#3
0
            public static syntax parseE1(syntax str) //E' -> +TE' | -TE' | пусто
            {
                switch (str.Lexems.FirstOrDefault().Value)
                {
                case "+":
                    str.tree(str.Lexems.FirstOrDefault().TokType, str.Lexems.FirstOrDefault().Value);
                    str.Lexems.RemoveAt(0);
                    return(parseE1(parseT(str)));

                case "-":
                    str.tree(str.Lexems.FirstOrDefault().TokType, str.Lexems.FirstOrDefault().Value);
                    str.Lexems.RemoveAt(0);
                    return(parseE1(parseT(str)));

                default:
                    return(str);    //Возвращаем то же самое выражение
                }
            }
示例#4
0
            public static syntax parseF1(syntax str) //F' -> ^F | пусто
            {
                switch (str.Lexems.FirstOrDefault().Value)
                {
                case "^":
                    str.tree(str.Lexems.FirstOrDefault().TokType, str.Lexems.FirstOrDefault().Value);
                    str.Lexems.RemoveAt(0);
                    return(parseF(str));

                default:
                    return(str);
                }
            }