public static HeaderStatement Parse(Scope scope, KeywordToken headerToken) { var ret = new HeaderStatement(scope); ret.AddToken(headerToken); if (!scope.Code.PeekExact('{')) { return(ret); } ret.AddToken(BracesToken.Parse(scope, null)); return(ret); }
public static ForStatement Parse(Scope scope, KeywordToken forToken) { var ret = new ForStatement(scope); var code = scope.Code; ret.AddToken(forToken); if (!code.ReadExact('(')) { return(ret); } var brackets = new BracketsToken(scope); brackets.AddOpen(code.Span); ret.AddToken(brackets); // Initializer var exp = ExpressionToken.TryParse(scope, _conditionEndTokens); if (exp != null) { brackets.AddToken(exp); } if (!code.ReadExact(';')) { return(ret); } // Condition exp = ExpressionToken.TryParse(scope, _conditionEndTokens); if (exp != null) { brackets.AddToken(exp); } if (!code.ReadExact(';')) { return(ret); } // Increment exp = ExpressionToken.TryParse(scope, _conditionEndTokens); if (exp != null) { brackets.AddToken(exp); } if (!code.ReadExact(')')) { return(ret); } brackets.AddClose(code.Span); // Body var bodyScope = scope.Clone(); bodyScope.BreakOwner = ret; bodyScope.ContinueOwner = ret; if (!code.PeekExact('{')) { return(ret); } var body = BracesToken.Parse(bodyScope, null); ret.AddToken(body); return(ret); }
private void ParseCreateTable(KeywordToken tableToken) { AddToken(tableToken); var code = Code; // Table name if (!code.ReadWord()) { return; } var table = DkDict.Dict.GetTable(code.Text); if (table != null) { AddToken(new IdentifierToken(Scope, code.Span, code.Text, table.Definition)); } else { AddToken(new UnknownToken(Scope, code.Span, code.Text)); } // Table number if (!code.ReadNumber()) { return; } AddToken(new NumberToken(Scope, code.Span, code.Text)); // Table number+1 if (Code.ReadNumber()) { AddToken(new NumberToken(Scope, code.Span, code.Text)); } ExpressionToken exp; // Attributes ParseTableAttributes(_createTableEndTokens); BracketsToken brackets = null; BracesToken braces = null; GroupToken parent = null; if (code.ReadExact('(')) { brackets = new BracketsToken(Scope); brackets.AddOpen(code.Span); AddToken(brackets); parent = brackets; } else if (code.ReadExact('{')) { braces = new BracesToken(Scope); braces.AddOpen(code.Span); AddToken(braces); parent = braces; } else { return; } // Columns while (!code.EndOfFile) { if (code.ReadExact(')') || code.ReadExact('}')) { if (brackets != null) { brackets.AddClose(code.Span); } else if (braces != null) { braces.AddClose(code.Span); } return; } if (code.ReadExact(',')) { parent.AddToken(new DelimiterToken(Scope, code.Span)); continue; } if (!TryParseColumnDefinition(Scope, parent, table != null ? table.Definition : null, true)) { if ((exp = ExpressionToken.TryParse(Scope, _columnEndTokens)) != null) { parent.AddToken(exp); } else { break; } } } }