Improved parser.

This commit is contained in:
Rik van der Kleij 2019-01-29 20:33:46 +01:00
parent 5dab09f979
commit 990a07c112
9 changed files with 93 additions and 75 deletions

View File

@ -31,8 +31,6 @@ public class HaskellParser implements PsiParser, LightPsiParser {
r = cdecls(b, 0);
} else if (t == HS_CFILES_PRAGMA) {
r = cfiles_pragma(b, 0);
} else if (t == HS_CIDECL_EXPRESSION) {
r = cidecl_expression(b, 0);
} else if (t == HS_CIDECLS) {
r = cidecls(b, 0);
} else if (t == HS_CLASS_DECLARATION) {
@ -1047,7 +1045,7 @@ public class HaskellParser implements PsiParser, LightPsiParser {
/* ********************************************************** */
// inlinelike_pragma | specialize_pragma | instance_declaration | default_declaration |
// newtype_declaration | data_declaration | minimal_pragma | type_declaration | type_family_declaration | cidecl_expression
// newtype_declaration | data_declaration | minimal_pragma | type_declaration | type_family_declaration | line_expression
static boolean cidecl(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "cidecl")) return false;
boolean r;
@ -1060,18 +1058,7 @@ public class HaskellParser implements PsiParser, LightPsiParser {
if (!r) r = minimal_pragma(b, l + 1);
if (!r) r = type_declaration(b, l + 1);
if (!r) r = type_family_declaration(b, l + 1);
if (!r) r = cidecl_expression(b, l + 1);
return r;
}
/* ********************************************************** */
// expression
public static boolean cidecl_expression(PsiBuilder b, int l) {
if (!recursion_guard_(b, l, "cidecl_expression")) return false;
boolean r;
Marker m = enter_section_(b, l, _NONE_, HS_CIDECL_EXPRESSION, "<cidecl expression>");
r = expression(b, l + 1);
exit_section_(b, l, m, r, false, null);
if (!r) r = line_expression(b, l + 1);
return r;
}

View File

@ -10,15 +10,15 @@ public interface HaskellCdecls extends HaskellCompositeElement {
@NotNull
List<HaskellCdeclDataDeclaration> getCdeclDataDeclarationList();
@NotNull
List<HaskellCideclExpression> getCideclExpressionList();
@NotNull
List<HaskellDataDeclaration> getDataDeclarationList();
@NotNull
List<HaskellDefaultDeclaration> getDefaultDeclarationList();
@NotNull
List<HaskellDotDot> getDotDotList();
@NotNull
List<HaskellInlinelikePragma> getInlinelikePragmaList();
@ -31,9 +31,21 @@ public interface HaskellCdecls extends HaskellCompositeElement {
@NotNull
List<HaskellNewtypeDeclaration> getNewtypeDeclarationList();
@NotNull
List<HaskellQName> getQNameList();
@NotNull
List<HaskellReservedId> getReservedIdList();
@NotNull
List<HaskellSccPragma> getSccPragmaList();
@NotNull
List<HaskellSpecializePragma> getSpecializePragmaList();
@NotNull
List<HaskellTextLiteral> getTextLiteralList();
@NotNull
List<HaskellTypeDeclaration> getTypeDeclarationList();

View File

@ -7,15 +7,15 @@ import java.util.List;
public interface HaskellCidecls extends HaskellCompositeElement {
@NotNull
List<HaskellCideclExpression> getCideclExpressionList();
@NotNull
List<HaskellDataDeclaration> getDataDeclarationList();
@NotNull
List<HaskellDefaultDeclaration> getDefaultDeclarationList();
@NotNull
List<HaskellDotDot> getDotDotList();
@NotNull
List<HaskellInlinelikePragma> getInlinelikePragmaList();
@ -28,9 +28,21 @@ public interface HaskellCidecls extends HaskellCompositeElement {
@NotNull
List<HaskellNewtypeDeclaration> getNewtypeDeclarationList();
@NotNull
List<HaskellQName> getQNameList();
@NotNull
List<HaskellReservedId> getReservedIdList();
@NotNull
List<HaskellSccPragma> getSccPragmaList();
@NotNull
List<HaskellSpecializePragma> getSpecializePragmaList();
@NotNull
List<HaskellTextLiteral> getTextLiteralList();
@NotNull
List<HaskellTypeDeclaration> getTypeDeclarationList();

View File

@ -13,7 +13,6 @@ public interface HaskellTypes {
IElementType HS_CDECL_DATA_DECLARATION = new HaskellCompositeElementType("HS_CDECL_DATA_DECLARATION");
IElementType HS_CFILES_PRAGMA = new HaskellCompositeElementType("HS_CFILES_PRAGMA");
IElementType HS_CIDECLS = new HaskellCompositeElementType("HS_CIDECLS");
IElementType HS_CIDECL_EXPRESSION = new HaskellCompositeElementType("HS_CIDECL_EXPRESSION");
IElementType HS_CLASS_DECLARATION = new HaskellCompositeElementType("HS_CLASS_DECLARATION");
IElementType HS_CLAZZ = new HaskellCompositeElementType("HS_CLAZZ");
IElementType HS_CNAME = new HaskellCompositeElementType("HS_CNAME");
@ -188,8 +187,6 @@ public interface HaskellTypes {
return new HaskellCfilesPragmaImpl(node);
} else if (type == HS_CIDECLS) {
return new HaskellCideclsImpl(node);
} else if (type == HS_CIDECL_EXPRESSION) {
return new HaskellCideclExpressionImpl(node);
} else if (type == HS_CLASS_DECLARATION) {
return new HaskellClassDeclarationImpl(node);
} else if (type == HS_CLAZZ) {

View File

@ -22,10 +22,6 @@ public class HaskellVisitor extends PsiElementVisitor {
visitCompositeElement(o);
}
public void visitCideclExpression(@NotNull HaskellCideclExpression o) {
visitCompositeElement(o);
}
public void visitCidecls(@NotNull HaskellCidecls o) {
visitCompositeElement(o);
}

View File

@ -30,12 +30,6 @@ public class HaskellCdeclsImpl extends HaskellCompositeElementImpl implements Ha
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellCdeclDataDeclaration.class);
}
@Override
@NotNull
public List<HaskellCideclExpression> getCideclExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellCideclExpression.class);
}
@Override
@NotNull
public List<HaskellDataDeclaration> getDataDeclarationList() {
@ -48,6 +42,12 @@ public class HaskellCdeclsImpl extends HaskellCompositeElementImpl implements Ha
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellDefaultDeclaration.class);
}
@Override
@NotNull
public List<HaskellDotDot> getDotDotList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellDotDot.class);
}
@Override
@NotNull
public List<HaskellInlinelikePragma> getInlinelikePragmaList() {
@ -72,12 +72,36 @@ public class HaskellCdeclsImpl extends HaskellCompositeElementImpl implements Ha
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellNewtypeDeclaration.class);
}
@Override
@NotNull
public List<HaskellQName> getQNameList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellQName.class);
}
@Override
@NotNull
public List<HaskellReservedId> getReservedIdList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellReservedId.class);
}
@Override
@NotNull
public List<HaskellSccPragma> getSccPragmaList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellSccPragma.class);
}
@Override
@NotNull
public List<HaskellSpecializePragma> getSpecializePragmaList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellSpecializePragma.class);
}
@Override
@NotNull
public List<HaskellTextLiteral> getTextLiteralList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellTextLiteral.class);
}
@Override
@NotNull
public List<HaskellTypeDeclaration> getTypeDeclarationList() {

View File

@ -1,33 +0,0 @@
// This is a generated file. Not intended for manual editing.
package intellij.haskell.psi.impl;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
import intellij.haskell.psi.HaskellCideclExpression;
import intellij.haskell.psi.HaskellExpression;
import intellij.haskell.psi.HaskellVisitor;
import org.jetbrains.annotations.NotNull;
public class HaskellCideclExpressionImpl extends HaskellCompositeElementImpl implements HaskellCideclExpression {
public HaskellCideclExpressionImpl(ASTNode node) {
super(node);
}
public void accept(@NotNull HaskellVisitor visitor) {
visitor.visitCideclExpression(this);
}
public void accept(@NotNull PsiElementVisitor visitor) {
if (visitor instanceof HaskellVisitor) accept((HaskellVisitor) visitor);
else super.accept(visitor);
}
@Override
@NotNull
public HaskellExpression getExpression() {
return notNullChild(PsiTreeUtil.getChildOfType(this, HaskellExpression.class));
}
}

View File

@ -24,12 +24,6 @@ public class HaskellCideclsImpl extends HaskellCompositeElementImpl implements H
else super.accept(visitor);
}
@Override
@NotNull
public List<HaskellCideclExpression> getCideclExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellCideclExpression.class);
}
@Override
@NotNull
public List<HaskellDataDeclaration> getDataDeclarationList() {
@ -42,6 +36,12 @@ public class HaskellCideclsImpl extends HaskellCompositeElementImpl implements H
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellDefaultDeclaration.class);
}
@Override
@NotNull
public List<HaskellDotDot> getDotDotList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellDotDot.class);
}
@Override
@NotNull
public List<HaskellInlinelikePragma> getInlinelikePragmaList() {
@ -66,12 +66,36 @@ public class HaskellCideclsImpl extends HaskellCompositeElementImpl implements H
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellNewtypeDeclaration.class);
}
@Override
@NotNull
public List<HaskellQName> getQNameList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellQName.class);
}
@Override
@NotNull
public List<HaskellReservedId> getReservedIdList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellReservedId.class);
}
@Override
@NotNull
public List<HaskellSccPragma> getSccPragmaList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellSccPragma.class);
}
@Override
@NotNull
public List<HaskellSpecializePragma> getSpecializePragmaList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellSpecializePragma.class);
}
@Override
@NotNull
public List<HaskellTextLiteral> getTextLiteralList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, HaskellTextLiteral.class);
}
@Override
@NotNull
public List<HaskellTypeDeclaration> getTypeDeclarationList() {

View File

@ -264,8 +264,7 @@ cdecl_data_declaration ::= DATA (onls ctype_pragma)? onls (LEFT_PAREN onls
private cdecl ::= type_signature | cdecl_data_declaration | cidecl
private cidecl ::= inlinelike_pragma | specialize_pragma | instance_declaration | default_declaration |
newtype_declaration | data_declaration | minimal_pragma | type_declaration | type_family_declaration | cidecl_expression
cidecl_expression ::= expression
newtype_declaration | data_declaration | minimal_pragma | type_declaration | type_family_declaration | line_expression
expression ::= line_expression (nls line_expression)*
private line_expression ::= general_id+