Skip to content

Commit

Permalink
feat(hog): remove semicolons, require "as" for column aliases (#22868)
Browse files Browse the repository at this point in the history
  • Loading branch information
mariusandra authored Jun 12, 2024
1 parent f324ec6 commit 779b17f
Show file tree
Hide file tree
Showing 40 changed files with 3,149 additions and 3,177 deletions.
2,757 changes: 1,389 additions & 1,368 deletions hogql_parser/HogQLParser.cpp

Large diffs are not rendered by default.

86 changes: 42 additions & 44 deletions hogql_parser/HogQLParser.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ class HogQLParser : public antlr4::Parser {

enum {
RuleProgram = 0, RuleDeclaration = 1, RuleExpression = 2, RuleVarDecl = 3,
RuleVarAssignment = 4, RuleIdentifierList = 5, RuleStatement = 6, RuleExprStmt = 7,
RuleIfStmt = 8, RuleWhileStmt = 9, RuleReturnStmt = 10, RuleFuncStmt = 11,
RuleIdentifierList = 4, RuleStatement = 5, RuleReturnStmt = 6, RuleIfStmt = 7,
RuleWhileStmt = 8, RuleFuncStmt = 9, RuleVarAssignment = 10, RuleExprStmt = 11,
RuleEmptyStmt = 12, RuleBlock = 13, RuleKvPair = 14, RuleKvPairList = 15,
RuleSelect = 16, RuleSelectUnionStmt = 17, RuleSelectStmtWithParens = 18,
RuleSelectStmt = 19, RuleWithClause = 20, RuleTopClause = 21, RuleFromClause = 22,
Expand Down Expand Up @@ -92,14 +92,14 @@ class HogQLParser : public antlr4::Parser {
class DeclarationContext;
class ExpressionContext;
class VarDeclContext;
class VarAssignmentContext;
class IdentifierListContext;
class StatementContext;
class ExprStmtContext;
class ReturnStmtContext;
class IfStmtContext;
class WhileStmtContext;
class ReturnStmtContext;
class FuncStmtContext;
class VarAssignmentContext;
class ExprStmtContext;
class EmptyStmtContext;
class BlockContext;
class KvPairContext;
Expand Down Expand Up @@ -220,7 +220,6 @@ class HogQLParser : public antlr4::Parser {
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *LET();
IdentifierContext *identifier();
antlr4::tree::TerminalNode *SEMICOLON();
antlr4::tree::TerminalNode *COLON();
antlr4::tree::TerminalNode *EQ_SINGLE();
ExpressionContext *expression();
Expand All @@ -232,23 +231,6 @@ class HogQLParser : public antlr4::Parser {

VarDeclContext* varDecl();

class VarAssignmentContext : public antlr4::ParserRuleContext {
public:
VarAssignmentContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
std::vector<ExpressionContext *> expression();
ExpressionContext* expression(size_t i);
antlr4::tree::TerminalNode *COLON();
antlr4::tree::TerminalNode *EQ_SINGLE();
antlr4::tree::TerminalNode *SEMICOLON();


virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;

};

VarAssignmentContext* varAssignment();

class IdentifierListContext : public antlr4::ParserRuleContext {
public:
IdentifierListContext(antlr4::ParserRuleContext *parent, size_t invokingState);
Expand All @@ -270,12 +252,12 @@ class HogQLParser : public antlr4::Parser {
StatementContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
ReturnStmtContext *returnStmt();
EmptyStmtContext *emptyStmt();
ExprStmtContext *exprStmt();
IfStmtContext *ifStmt();
WhileStmtContext *whileStmt();
FuncStmtContext *funcStmt();
VarAssignmentContext *varAssignment();
ExprStmtContext *exprStmt();
EmptyStmtContext *emptyStmt();
BlockContext *block();


Expand All @@ -285,10 +267,11 @@ class HogQLParser : public antlr4::Parser {

StatementContext* statement();

class ExprStmtContext : public antlr4::ParserRuleContext {
class ReturnStmtContext : public antlr4::ParserRuleContext {
public:
ExprStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
ReturnStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *RETURN();
ExpressionContext *expression();
antlr4::tree::TerminalNode *SEMICOLON();

Expand All @@ -297,7 +280,7 @@ class HogQLParser : public antlr4::Parser {

};

ExprStmtContext* exprStmt();
ReturnStmtContext* returnStmt();

class IfStmtContext : public antlr4::ParserRuleContext {
public:
Expand Down Expand Up @@ -327,28 +310,14 @@ class HogQLParser : public antlr4::Parser {
ExpressionContext *expression();
antlr4::tree::TerminalNode *RPAREN();
StatementContext *statement();


virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;

};

WhileStmtContext* whileStmt();

class ReturnStmtContext : public antlr4::ParserRuleContext {
public:
ReturnStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
antlr4::tree::TerminalNode *RETURN();
ExpressionContext *expression();
antlr4::tree::TerminalNode *SEMICOLON();


virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;

};

ReturnStmtContext* returnStmt();
WhileStmtContext* whileStmt();

class FuncStmtContext : public antlr4::ParserRuleContext {
public:
Expand All @@ -368,6 +337,36 @@ class HogQLParser : public antlr4::Parser {

FuncStmtContext* funcStmt();

class VarAssignmentContext : public antlr4::ParserRuleContext {
public:
VarAssignmentContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
std::vector<ExpressionContext *> expression();
ExpressionContext* expression(size_t i);
antlr4::tree::TerminalNode *COLON();
antlr4::tree::TerminalNode *EQ_SINGLE();


virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;

};

VarAssignmentContext* varAssignment();

class ExprStmtContext : public antlr4::ParserRuleContext {
public:
ExprStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
virtual size_t getRuleIndex() const override;
ExpressionContext *expression();
antlr4::tree::TerminalNode *SEMICOLON();


virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override;

};

ExprStmtContext* exprStmt();

class EmptyStmtContext : public antlr4::ParserRuleContext {
public:
EmptyStmtContext(antlr4::ParserRuleContext *parent, size_t invokingState);
Expand Down Expand Up @@ -1246,7 +1245,6 @@ class HogQLParser : public antlr4::Parser {
ColumnExprAliasContext(ColumnExprContext *ctx);

ColumnExprContext *columnExpr();
AliasContext *alias();
antlr4::tree::TerminalNode *AS();
IdentifierContext *identifier();
antlr4::tree::TerminalNode *STRING_LITERAL();
Expand Down
8 changes: 4 additions & 4 deletions hogql_parser/HogQLParser.interp

Large diffs are not rendered by default.

14 changes: 7 additions & 7 deletions hogql_parser/HogQLParserBaseVisitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,6 @@ class HogQLParserBaseVisitor : public HogQLParserVisitor {
return visitChildren(ctx);
}

virtual std::any visitVarAssignment(HogQLParser::VarAssignmentContext *ctx) override {
return visitChildren(ctx);
}

virtual std::any visitIdentifierList(HogQLParser::IdentifierListContext *ctx) override {
return visitChildren(ctx);
}
Expand All @@ -43,7 +39,7 @@ class HogQLParserBaseVisitor : public HogQLParserVisitor {
return visitChildren(ctx);
}

virtual std::any visitExprStmt(HogQLParser::ExprStmtContext *ctx) override {
virtual std::any visitReturnStmt(HogQLParser::ReturnStmtContext *ctx) override {
return visitChildren(ctx);
}

Expand All @@ -55,11 +51,15 @@ class HogQLParserBaseVisitor : public HogQLParserVisitor {
return visitChildren(ctx);
}

virtual std::any visitReturnStmt(HogQLParser::ReturnStmtContext *ctx) override {
virtual std::any visitFuncStmt(HogQLParser::FuncStmtContext *ctx) override {
return visitChildren(ctx);
}

virtual std::any visitFuncStmt(HogQLParser::FuncStmtContext *ctx) override {
virtual std::any visitVarAssignment(HogQLParser::VarAssignmentContext *ctx) override {
return visitChildren(ctx);
}

virtual std::any visitExprStmt(HogQLParser::ExprStmtContext *ctx) override {
return visitChildren(ctx);
}

Expand Down
10 changes: 5 additions & 5 deletions hogql_parser/HogQLParserVisitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,22 @@ class HogQLParserVisitor : public antlr4::tree::AbstractParseTreeVisitor {

virtual std::any visitVarDecl(HogQLParser::VarDeclContext *context) = 0;

virtual std::any visitVarAssignment(HogQLParser::VarAssignmentContext *context) = 0;

virtual std::any visitIdentifierList(HogQLParser::IdentifierListContext *context) = 0;

virtual std::any visitStatement(HogQLParser::StatementContext *context) = 0;

virtual std::any visitExprStmt(HogQLParser::ExprStmtContext *context) = 0;
virtual std::any visitReturnStmt(HogQLParser::ReturnStmtContext *context) = 0;

virtual std::any visitIfStmt(HogQLParser::IfStmtContext *context) = 0;

virtual std::any visitWhileStmt(HogQLParser::WhileStmtContext *context) = 0;

virtual std::any visitReturnStmt(HogQLParser::ReturnStmtContext *context) = 0;

virtual std::any visitFuncStmt(HogQLParser::FuncStmtContext *context) = 0;

virtual std::any visitVarAssignment(HogQLParser::VarAssignmentContext *context) = 0;

virtual std::any visitExprStmt(HogQLParser::ExprStmtContext *context) = 0;

virtual std::any visitEmptyStmt(HogQLParser::EmptyStmtContext *context) = 0;

virtual std::any visitBlock(HogQLParser::BlockContext *context) = 0;
Expand Down
4 changes: 1 addition & 3 deletions hogql_parser/parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1059,9 +1059,7 @@ class HogQLParseTreeConverter : public HogQLParserBaseVisitor {

VISIT(ColumnExprAlias) {
string alias;
if (ctx->alias()) {
alias = visitAsString(ctx->alias());
} else if (ctx->identifier()) {
if (ctx->identifier()) {
alias = visitAsString(ctx->identifier());
} else if (ctx->STRING_LITERAL()) {
alias = parse_string_literal_ctx(ctx->STRING_LITERAL());
Expand Down
15 changes: 7 additions & 8 deletions hogvm/__tests__/__snapshots__/functions.hoge
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
["_h", 32, "-- test functions --", 2, "print", 1, 35, 41, "add", 2, 6, 36, 0, 36, 1, 6, 38, 41, "add2", 2, 9, 36, 0, 36,
1, 6, 36, 2, 38, 35, 41, "mult", 2, 6, 36, 0, 36, 1, 8, 38, 41, "noArgs", 0, 12, 32, "basdfasdf", 33, 3, 33, 2, 6, 36,
1, 38, 35, 35, 41, "empty", 0, 2, 31, 38, 41, "empty2", 0, 4, 29, 35, 31, 38, 41, "empty3", 0, 8, 29, 35, 29, 35, 29,
35, 31, 38, 41, "noReturn", 0, 14, 33, 1, 33, 2, 36, 1, 36, 0, 6, 31, 38, 35, 35, 35, 33, 4, 33, 3, 2, "add", 2, 2,
"print", 1, 35, 33, 1, 33, 1, 2, "add", 2, 33, 100, 33, 4, 33, 3, 2, "add", 2, 6, 6, 2, "print", 1, 35, 33, -1, 2,
"noArgs", 0, 2, "ifNull", 2, 2, "print", 1, 35, 33, -1, 2, "empty", 0, 2, "ifNull", 2, 2, "print", 1, 35, 33, -1, 2,
"empty2", 0, 2, "ifNull", 2, 2, "print", 1, 35, 33, -1, 2, "empty3", 0, 2, "ifNull", 2, 2, "print", 1, 35, 33, -1, 2,
"noReturn", 0, 2, "ifNull", 2, 2, "print", 1, 35, 33, 2, 33, 1, 33, 2, 2, "add", 2, 33, 100, 33, 4, 33, 3, 2, "add", 2,
6, 6, 2, "mult", 2, 2, "print", 1, 35, 33, 10, 33, 1, 33, 2, 2, "add2", 2, 33, 100, 33, 4, 33, 3, 2, "add2", 2, 6, 6, 2,
"mult", 2, 2, "print", 1, 35]
1, 38, 35, 35, 41, "empty", 0, 2, 31, 38, 41, "empty2", 0, 2, 31, 38, 41, "empty3", 0, 2, 31, 38, 41, "noReturn", 0, 14,
33, 1, 33, 2, 36, 1, 36, 0, 6, 31, 38, 35, 35, 35, 33, 4, 33, 3, 2, "add", 2, 2, "print", 1, 35, 33, 1, 33, 1, 2, "add",
2, 33, 100, 33, 4, 33, 3, 2, "add", 2, 6, 6, 2, "print", 1, 35, 33, -1, 2, "noArgs", 0, 2, "ifNull", 2, 2, "print", 1,
35, 33, -1, 2, "empty", 0, 2, "ifNull", 2, 2, "print", 1, 35, 33, -1, 2, "empty2", 0, 2, "ifNull", 2, 2, "print", 1, 35,
33, -1, 2, "empty3", 0, 2, "ifNull", 2, 2, "print", 1, 35, 33, -1, 2, "noReturn", 0, 2, "ifNull", 2, 2, "print", 1, 35,
33, 2, 33, 1, 33, 2, 2, "add", 2, 33, 100, 33, 4, 33, 3, 2, "add", 2, 6, 6, 2, "mult", 2, 2, "print", 1, 35, 33, 10, 33,
1, 33, 2, 2, "add2", 2, 33, 100, 33, 4, 33, 3, 2, "add2", 2, 6, 6, 2, "mult", 2, 2, "print", 1, 35]
22 changes: 11 additions & 11 deletions hogvm/__tests__/arrays.hog
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
print([]);
print([1, 2, 3]);
print([1, '2', 3]);
print([1, [2, 3], 4]);
print([1, [2, [3, 4]], 5]);
print([])
print([1, 2, 3])
print([1, '2', 3])
print([1, [2, 3], 4])
print([1, [2, [3, 4]], 5])

let a := [1, 2, 3];
print(a[1]);
print([1, 2, 3][1]);
print([1, [2, [3, 4]], 5][1][1][1]);
print([1, [2, [3, 4]], 5][1][1][1] + 1);
print([1, [2, [3, 4]], 5].1.1.1);
let a := [1, 2, 3]
print(a[1])
print([1, 2, 3][1])
print([1, [2, [3, 4]], 5][1][1][1])
print([1, [2, [3, 4]], 5][1][1][1] + 1)
print([1, [2, [3, 4]], 5].1.1.1)
22 changes: 11 additions & 11 deletions hogvm/__tests__/dicts.hog
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
print({});
print({'key': 'value'});
print({'key': 'value', 'other': 'thing'});
print({'key': {'otherKey': 'value'}});
print({key: 'value'});
print({})
print({'key': 'value'})
print({'key': 'value', 'other': 'thing'})
print({'key': {'otherKey': 'value'}})
print({key: 'value'})

let key := 3;
print({key: 'value'});
let key := 3
print({key: 'value'})

print({'key': 'value'}.key);
print({'key': 'value'}['key']);
print({'key': {'otherKey': 'value'}}.key.otherKey);
print({'key': {'otherKey': 'value'}}['key'].otherKey);
print({'key': 'value'}.key)
print({'key': 'value'}['key'])
print({'key': {'otherKey': 'value'}}.key.otherKey)
print({'key': {'otherKey': 'value'}}['key'].otherKey)
44 changes: 22 additions & 22 deletions hogvm/__tests__/functions.hog
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
print('-- test functions --');
print('-- test functions --')

fn add(a, b) {
return a + b;
return a + b
}
fn add2(a, b) {
let c := a + b;
return c;
let c := a + b
return c
}
fn mult(a, b) {
return a * b;
return a * b
}
fn noArgs() {
let url := 'basdfasdf';
let second := 2 + 3;
return second;
let url := 'basdfasdf'
let second := 2 + 3
return second
}
fn empty() {}
fn empty2() {;}
fn empty3() {;;;}
fn empty2() {}
fn empty3() {}
fn noReturn() {
let a := 1;
let b := 2;
let c := a + b;
let a := 1
let b := 2
let c := a + b
}

print(add(3, 4));
print(add(3, 4) + 100 + add(1, 1));
print(noArgs() ?? -1);
print(empty() ?? -1);
print(empty2() ?? -1);
print(empty3() ?? -1);
print(noReturn() ?? -1);
print(mult(add(3, 4) + 100 + add(2, 1), 2));
print(mult(add2(3, 4) + 100 + add2(2, 1), 10));
print(add(3, 4))
print(add(3, 4) + 100 + add(1, 1))
print(noArgs() ?? -1)
print(empty() ?? -1)
print(empty2() ?? -1)
print(empty3() ?? -1)
print(noReturn() ?? -1)
print(mult(add(3, 4) + 100 + add(2, 1), 2))
print(mult(add2(3, 4) + 100 + add2(2, 1), 10))
Loading

0 comments on commit 779b17f

Please sign in to comment.