diff --git a/src/main/gen/com/spicelang/intellij/spice/SpiceParser.java b/src/main/gen/com/spicelang/intellij/spice/SpiceParser.java index a2ed02c..7f5d808 100644 --- a/src/main/gen/com/spicelang/intellij/spice/SpiceParser.java +++ b/src/main/gen/com/spicelang/intellij/spice/SpiceParser.java @@ -1099,6 +1099,17 @@ private static boolean equalityExpr_1_0_0(PsiBuilder b, int l) { return r; } + /* ********************************************************** */ + // assignExpr + public static boolean exprStmt(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "exprStmt")) return false; + boolean r; + Marker m = enter_section_(b, l, _NONE_, EXPR_STMT, ""); + r = assignExpr(b, l + 1); + exit_section_(b, l, m, r, false, null); + return r; + } + /* ********************************************************** */ // topLevelDefAttr? EXT (F LESS dataType GREATER | P) (IDENTIFIER | TYPE_IDENTIFIER) LPAREN (typeLst ELLIPSIS?)? RPAREN SEMICOLON public static boolean extDecl(PsiBuilder b, int l) { @@ -2603,7 +2614,7 @@ private static boolean spiceFile_0(PsiBuilder b, int l) { } /* ********************************************************** */ - // (declStmt | assignExpr | returnStmt | breakStmt | continueStmt | fallthroughStmt) SEMICOLON + // (declStmt | exprStmt | returnStmt | breakStmt | continueStmt | fallthroughStmt) SEMICOLON public static boolean stmt(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stmt")) return false; boolean r; @@ -2614,12 +2625,12 @@ public static boolean stmt(PsiBuilder b, int l) { return r; } - // declStmt | assignExpr | returnStmt | breakStmt | continueStmt | fallthroughStmt + // declStmt | exprStmt | returnStmt | breakStmt | continueStmt | fallthroughStmt private static boolean stmt_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "stmt_0")) return false; boolean r; r = declStmt(b, l + 1); - if (!r) r = assignExpr(b, l + 1); + if (!r) r = exprStmt(b, l + 1); if (!r) r = returnStmt(b, l + 1); if (!r) r = breakStmt(b, l + 1); if (!r) r = continueStmt(b, l + 1); diff --git a/src/main/gen/com/spicelang/intellij/spice/psi/SpiceExprStmt.java b/src/main/gen/com/spicelang/intellij/spice/psi/SpiceExprStmt.java new file mode 100644 index 0000000..8869d26 --- /dev/null +++ b/src/main/gen/com/spicelang/intellij/spice/psi/SpiceExprStmt.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package com.spicelang.intellij.spice.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface SpiceExprStmt extends PsiElement { + + @NotNull + SpiceAssignExpr getAssignExpr(); + +} diff --git a/src/main/gen/com/spicelang/intellij/spice/psi/SpiceStmt.java b/src/main/gen/com/spicelang/intellij/spice/psi/SpiceStmt.java index 439f810..ec3e433 100644 --- a/src/main/gen/com/spicelang/intellij/spice/psi/SpiceStmt.java +++ b/src/main/gen/com/spicelang/intellij/spice/psi/SpiceStmt.java @@ -7,9 +7,6 @@ public interface SpiceStmt extends PsiElement { - @Nullable - SpiceAssignExpr getAssignExpr(); - @Nullable SpiceBreakStmt getBreakStmt(); @@ -19,6 +16,9 @@ public interface SpiceStmt extends PsiElement { @Nullable SpiceDeclStmt getDeclStmt(); + @Nullable + SpiceExprStmt getExprStmt(); + @Nullable SpiceFallthroughStmt getFallthroughStmt(); diff --git a/src/main/gen/com/spicelang/intellij/spice/psi/SpiceTypes.java b/src/main/gen/com/spicelang/intellij/spice/psi/SpiceTypes.java index b12a645..1bb2ac2 100644 --- a/src/main/gen/com/spicelang/intellij/spice/psi/SpiceTypes.java +++ b/src/main/gen/com/spicelang/intellij/spice/psi/SpiceTypes.java @@ -43,6 +43,7 @@ public interface SpiceTypes { IElementType ENUM_ITEM = new SpiceElementType("ENUM_ITEM"); IElementType ENUM_ITEM_LST = new SpiceElementType("ENUM_ITEM_LST"); IElementType EQUALITY_EXPR = new SpiceElementType("EQUALITY_EXPR"); + IElementType EXPR_STMT = new SpiceElementType("EXPR_STMT"); IElementType EXT_DECL = new SpiceElementType("EXT_DECL"); IElementType FALLTHROUGH_STMT = new SpiceElementType("FALLTHROUGH_STMT"); IElementType FIELD = new SpiceElementType("FIELD"); @@ -318,6 +319,9 @@ else if (type == ENUM_ITEM_LST) { else if (type == EQUALITY_EXPR) { return new SpiceEqualityExprImpl(node); } + else if (type == EXPR_STMT) { + return new SpiceExprStmtImpl(node); + } else if (type == EXT_DECL) { return new SpiceExtDeclImpl(node); } diff --git a/src/main/gen/com/spicelang/intellij/spice/psi/SpiceVisitor.java b/src/main/gen/com/spicelang/intellij/spice/psi/SpiceVisitor.java index cc627b1..4821d62 100644 --- a/src/main/gen/com/spicelang/intellij/spice/psi/SpiceVisitor.java +++ b/src/main/gen/com/spicelang/intellij/spice/psi/SpiceVisitor.java @@ -147,6 +147,10 @@ public void visitEqualityExpr(@NotNull SpiceEqualityExpr o) { visitPsiElement(o); } + public void visitExprStmt(@NotNull SpiceExprStmt o) { + visitPsiElement(o); + } + public void visitExtDecl(@NotNull SpiceExtDecl o) { visitPsiElement(o); } diff --git a/src/main/gen/com/spicelang/intellij/spice/psi/impl/SpiceExprStmtImpl.java b/src/main/gen/com/spicelang/intellij/spice/psi/impl/SpiceExprStmtImpl.java new file mode 100644 index 0000000..7968525 --- /dev/null +++ b/src/main/gen/com/spicelang/intellij/spice/psi/impl/SpiceExprStmtImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package com.spicelang.intellij.spice.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static com.spicelang.intellij.spice.psi.SpiceTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import com.spicelang.intellij.spice.psi.*; + +public class SpiceExprStmtImpl extends ASTWrapperPsiElement implements SpiceExprStmt { + + public SpiceExprStmtImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull SpiceVisitor visitor) { + visitor.visitExprStmt(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof SpiceVisitor) accept((SpiceVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public SpiceAssignExpr getAssignExpr() { + return findNotNullChildByClass(SpiceAssignExpr.class); + } + +} diff --git a/src/main/gen/com/spicelang/intellij/spice/psi/impl/SpiceStmtImpl.java b/src/main/gen/com/spicelang/intellij/spice/psi/impl/SpiceStmtImpl.java index 3bdfc51..e104d5b 100644 --- a/src/main/gen/com/spicelang/intellij/spice/psi/impl/SpiceStmtImpl.java +++ b/src/main/gen/com/spicelang/intellij/spice/psi/impl/SpiceStmtImpl.java @@ -27,12 +27,6 @@ public void accept(@NotNull PsiElementVisitor visitor) { else super.accept(visitor); } - @Override - @Nullable - public SpiceAssignExpr getAssignExpr() { - return findChildByClass(SpiceAssignExpr.class); - } - @Override @Nullable public SpiceBreakStmt getBreakStmt() { @@ -51,6 +45,12 @@ public SpiceDeclStmt getDeclStmt() { return findChildByClass(SpiceDeclStmt.class); } + @Override + @Nullable + public SpiceExprStmt getExprStmt() { + return findChildByClass(SpiceExprStmt.class); + } + @Override @Nullable public SpiceFallthroughStmt getFallthroughStmt() { diff --git a/src/main/java/com/spicelang/intellij/spice/Spice.bnf b/src/main/java/com/spicelang/intellij/spice/Spice.bnf index 136b14f..aaaee05 100644 --- a/src/main/java/com/spicelang/intellij/spice/Spice.bnf +++ b/src/main/java/com/spicelang/intellij/spice/Spice.bnf @@ -61,8 +61,9 @@ enumItemLst ::= enumItem (COMMA enumItem)* enumItem ::= TYPE_IDENTIFIER (ASSIGN INT_LIT)? field ::= dataType IDENTIFIER (ASSIGN assignExpr)? signature ::= specifierLst? (F LESS dataType GREATER | P) IDENTIFIER (LESS typeLst GREATER)? LPAREN typeLst? RPAREN SEMICOLON -stmt ::= (declStmt | assignExpr | returnStmt | breakStmt | continueStmt | fallthroughStmt) SEMICOLON +stmt ::= (declStmt | exprStmt | returnStmt | breakStmt | continueStmt | fallthroughStmt) SEMICOLON declStmt ::= dataType IDENTIFIER (ASSIGN assignExpr)? +exprStmt ::= assignExpr specifierLst ::= specifier+ specifier ::= CONST | SIGNED | UNSIGNED | INLINE | PUBLIC | HEAP | COMPOSE modAttr ::= MOD_ATTR_PREAMBLE LBRACKET attrLst RBRACKET