Select Git revision
Grammar.bnf
-
Johannes Mey authoredJohannes Mey authored
Grammar.bnf 2.08 KiB
{
parserClass="org.jastadd.tooling.grammar.parser.GrammarParser"
extends="com.intellij.extapi.psi.ASTWrapperPsiElement"
psiClassPrefix="Grammar"
psiImplClassSuffix="Impl"
psiPackage="org.jastadd.tooling.grammar.psi"
psiImplPackage="org.jastadd.tooling.grammar.psi.impl"
elementTypeHolderClass="org.jastadd.tooling.grammar.parser.GrammarTypes"
elementTypeClass="org.jastadd.tooling.grammar.psi.GrammarElementType"
tokenTypeClass="org.jastadd.tooling.grammar.psi.GrammarTokenType"
psiImplUtilClass="org.jastadd.tooling.grammar.psi.impl.GrammarPsiImplUtil"
}
GrammarFile ::= comment* ((type_decl | relation) comment*)*
comment ::= (WHITESPACE | MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT)
type_decl ::= ABSTRACT? type_name (COL type_name)? (ASSIGN (component | nta_component)*)? SCOL
{
extends="org.jastadd.tooling.grammar.psi.impl.GrammarTypeDeclImplExtension"
implements="org.jastadd.tooling.common.psi.NamedElement"
}
nta_component ::= SLASH component SLASH
component ::= (component_name COL type_name STAR?) | (type_name STAR?) | (LBRACKET component_name COL type_name RBRACKET) | (LBRACKET type_name RBRACKET) | (LT component_name (COL (java_type_use))? GT)
java_type_use ::= parameterized_java_type_use | simple_java_type_use
parameterized_java_type_use ::= simple_java_type_use LT java_type_use (COMMA java_type_use)* GT
simple_java_type_use ::= java_name (DOT java_name)*
relation ::= REL ((unnamed_role LEFT navigable_role) | (navigable_role RIGHT unnamed_role) | (navigable_role BIDIRECTIONAL navigable_role)) SCOL
unnamed_role ::= type_name | navigable_role
navigable_role ::= type_name DOT component_name (STAR | QUESTION_MARK)?
//// for auto-completion, it is helpful if we can distinguish the different IDs
//type_name ::= ID
type_name ::= ID
{
extends="org.jastadd.tooling.grammar.psi.impl.GrammarTypeNameImplExtension"
implements="org.jastadd.tooling.common.psi.NamedElement"
}
component_name ::= ID
{
extends="org.jastadd.tooling.grammar.psi.impl.GrammarComponentNameImplExtension"
implements="org.jastadd.tooling.common.psi.NamedElement"
}
java_name ::= ID