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); }
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); //Возвращаем то же самое выражение } }
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); //Возвращаем то же самое выражение } }
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); } }