public new static If_Procedure Create(ContinueQueue parsingObject) { If_Procedure prefab = new If_Procedure(); Label headLabel = Label.Create(parsingObject); // This should be `(` parsingObject.Dequeue(); prefab.Head = Expression.Create(parsingObject); prefab.Head.Parent = prefab; // This should be `)` parsingObject.Dequeue(); prefab.Head.Label = headLabel; // the next string should be "{", remove it parsingObject.Dequeue(); while (parsingObject.Peek() != "}") { Label bodyLabel = Label.Create(parsingObject); var temp = Statement.Create(parsingObject); temp.Parent = prefab; temp.Label = bodyLabel; temp.Expression.Label = bodyLabel; prefab.Body.Add(temp); } // remove '}' parsingObject.Dequeue(); prefab.Else = Else_Procedure.Create(parsingObject); return(prefab); }
public static Token Create(ContinueQueue parsingObject) { Label label = Label.Create(parsingObject); Token token = null; string content = parsingObject.Dequeue(); if (!char.IsLetterOrDigit(content[0])) { char character = content[0]; switch (character) { case '(': break; case '{': break; case '\"': token = FormatString.Create(parsingObject); break; // # Pre-interpretation option. eg. #include <stdlib> case '#': token = PreInterpretationStatement.Create(parsingObject); break; // // Comment. eg. // Comment case '/': if (parsingObject.Peek()[0] == '/') { parsingObject.Dequeue(); token = Comment.Create(parsingObject); } break; default: break; } } else { switch (content) { case "if": token = If_Procedure.Create(parsingObject); break; default: break; } } token.Label = label; return(token); }