public override MultilineStatement Interprete(string src) { var stmt = new SwitchStmt(); var Cases = new Dictionary <string, List <IAst> >(); string tmp = ""; string tmpheader = ""; foreach (string line in src.Split('\n')) { if (Parser.Grammar.GetPattern("switchstart").IsValid(line)) { stmt.Header = line; } else { if (Parser.Grammar.GetPattern("case").IsValid(line) || Parser.Grammar.GetPattern("default").IsValid(line)) { if (tmpheader != "") { Cases.Add(tmpheader.TrimEnd('\n').TrimEnd(';'), Parser.ParseCodeBlock(tmp, "").Nodes); } tmpheader = line; tmp = ""; } else { tmp += line + ";\n"; } } if (Parser.Grammar.GetPattern("switchend").IsValid(line)) { if (tmpheader != "") { Cases.Add(tmpheader.TrimEnd('\n').TrimEnd(';'), Parser.ParseCodeBlock(tmp, "").Nodes); } } } foreach (var @case in Cases) { if (Parser.Grammar.GetPattern("case").IsValid(@case.Key)) { Match mc = Parser.Grammar.GetPattern("case").Match(@case.Key); stmt.Cases.Add(new EcObject(mc.Groups["Name"].Value), @case.Value); } if (Parser.Grammar.GetPattern("default").IsValid(@case.Key)) { stmt.Default = @case.Value; } } return(stmt); }
public override MultilineStatement Interprete(string src) { var stmt = new SwitchStmt(); var Cases = new Dictionary<string, List<IAst>>(); string tmp = ""; string tmpheader = ""; foreach (string line in src.Split('\n')) { if (Parser.Grammar.GetPattern("switchstart").IsValid(line)) { stmt.Header = line; } else { if (Parser.Grammar.GetPattern("case").IsValid(line) || Parser.Grammar.GetPattern("default").IsValid(line)) { if (tmpheader != "") { Cases.Add(tmpheader.TrimEnd('\n').TrimEnd(';'), Parser.ParseCodeBlock(tmp, "").Nodes); } tmpheader = line; tmp = ""; } else { tmp += line + ";\n"; } } if (Parser.Grammar.GetPattern("switchend").IsValid(line)) { if (tmpheader != "") { Cases.Add(tmpheader.TrimEnd('\n').TrimEnd(';'), Parser.ParseCodeBlock(tmp, "").Nodes); } } } foreach (var @case in Cases) { if (Parser.Grammar.GetPattern("case").IsValid(@case.Key)) { Match mc = Parser.Grammar.GetPattern("case").Match(@case.Key); stmt.Cases.Add(new EcObject(mc.Groups["Name"].Value), @case.Value); } if (Parser.Grammar.GetPattern("default").IsValid(@case.Key)) { stmt.Default = @case.Value; } } return stmt; }