From 4f75e311601694855a2f81dc38c1c319f8bfe075 Mon Sep 17 00:00:00 2001 From: Marc Auberer Date: Wed, 12 Feb 2025 23:38:12 +0100 Subject: [PATCH] Unify syntax with alignof with other language components --- .../spicelang/intellij/spice/SpiceParser.java | 38 ++++++++++++------- .../com/spicelang/intellij/spice/Spice.bnf | 2 +- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/main/gen/com/spicelang/intellij/spice/SpiceParser.java b/src/main/gen/com/spicelang/intellij/spice/SpiceParser.java index a83c199..049b29d 100644 --- a/src/main/gen/com/spicelang/intellij/spice/SpiceParser.java +++ b/src/main/gen/com/spicelang/intellij/spice/SpiceParser.java @@ -100,37 +100,49 @@ private static boolean aliasDef_0(PsiBuilder b, int l) { } /* ********************************************************** */ - // ALIGNOF LPAREN (assignExpr | TYPE dataType) RPAREN + // ALIGNOF (LPAREN assignExpr RPAREN | LESS dataType GREATER LPAREN RPAREN) public static boolean alignOfCall(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "alignOfCall")) return false; if (!nextTokenIs(b, ALIGNOF)) return false; boolean r; Marker m = enter_section_(b); - r = consumeTokens(b, 0, ALIGNOF, LPAREN); - r = r && alignOfCall_2(b, l + 1); - r = r && consumeToken(b, RPAREN); + r = consumeToken(b, ALIGNOF); + r = r && alignOfCall_1(b, l + 1); exit_section_(b, m, ALIGN_OF_CALL, r); return r; } - // assignExpr | TYPE dataType - private static boolean alignOfCall_2(PsiBuilder b, int l) { - if (!recursion_guard_(b, l, "alignOfCall_2")) return false; + // LPAREN assignExpr RPAREN | LESS dataType GREATER LPAREN RPAREN + private static boolean alignOfCall_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "alignOfCall_1")) return false; boolean r; Marker m = enter_section_(b); - r = assignExpr(b, l + 1); - if (!r) r = alignOfCall_2_1(b, l + 1); + r = alignOfCall_1_0(b, l + 1); + if (!r) r = alignOfCall_1_1(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // LPAREN assignExpr RPAREN + private static boolean alignOfCall_1_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "alignOfCall_1_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, LPAREN); + r = r && assignExpr(b, l + 1); + r = r && consumeToken(b, RPAREN); exit_section_(b, m, null, r); return r; } - // TYPE dataType - private static boolean alignOfCall_2_1(PsiBuilder b, int l) { - if (!recursion_guard_(b, l, "alignOfCall_2_1")) return false; + // LESS dataType GREATER LPAREN RPAREN + private static boolean alignOfCall_1_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "alignOfCall_1_1")) return false; boolean r; Marker m = enter_section_(b); - r = consumeToken(b, TYPE); + r = consumeToken(b, LESS); r = r && dataType(b, l + 1); + r = r && consumeTokens(b, 0, GREATER, LPAREN, RPAREN); exit_section_(b, m, null, r); return r; } diff --git a/src/main/java/com/spicelang/intellij/spice/Spice.bnf b/src/main/java/com/spicelang/intellij/spice/Spice.bnf index 1513064..559c684 100644 --- a/src/main/java/com/spicelang/intellij/spice/Spice.bnf +++ b/src/main/java/com/spicelang/intellij/spice/Spice.bnf @@ -82,7 +82,7 @@ assertStmt ::= ASSERT assignExpr SEMICOLON builtinCall ::= printfCall | sizeOfCall | alignOfCall | lenCall | panicCall | sysCall printfCall ::= PRINTF LPAREN STRING_LIT (COMMA assignExpr)* RPAREN sizeOfCall ::= SIZEOF (LPAREN assignExpr RPAREN | LESS dataType GREATER LPAREN RPAREN) -alignOfCall ::= ALIGNOF LPAREN (assignExpr | TYPE dataType) RPAREN +alignOfCall ::= ALIGNOF (LPAREN assignExpr RPAREN | LESS dataType GREATER LPAREN RPAREN) lenCall ::= LEN LPAREN assignExpr RPAREN panicCall ::= PANIC LPAREN assignExpr RPAREN sysCall ::= SYSCALL LPAREN assignExpr (COMMA assignExpr)* RPAREN