package org.intellij.grammar.expression; import com.intellij.extapi.psi.PsiFileBase; import com.intellij.lang.ASTNode; import com.intellij.lang.Language; import com.intellij.lang.PsiParser; import com.intellij.lexer.Lexer; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.LanguageFileType; import com.intellij.openapi.project.Project; import com.intellij.psi.FileViewProvider; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.PsiFile; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.IFileElementType; import org.intellij.grammar.BnfParserDefinition; import org.intellij.grammar.parser.BnfLexer; import org.intellij.grammar.psi.BnfTypes; import org.intellij.grammar.psi.impl.BnfCompositeElementImpl; import org.jetbrains.annotations.NotNull; import javax.swing.*; /** * @author gregsh */ public class ExpressionParserDefinition extends BnfParserDefinition{ public static final Language EXPR_LANGUAGE = new Language("EXPR") { }; public static IElementType createType(String str) { return new IElementType(str, EXPR_LANGUAGE); } public static final LanguageFileType FILE_TYPE = new LanguageFileType(EXPR_LANGUAGE) { @NotNull @Override public String getName() { return "Expressions"; } @NotNull @Override public String getDescription() { return ""; } @NotNull @Override public String getDefaultExtension() { return "expr"; } @Override public Icon getIcon() { return null; } }; public static final IFileElementType EXPR_FILE_TYPE = new IFileElementType("EXPR_FILE_TYPE", EXPR_LANGUAGE); @Override public IFileElementType getFileNodeType() { return EXPR_FILE_TYPE; } @NotNull @Override public Lexer createLexer(Project project) { return new ExpressionLexer(); } @Override public PsiFile createFile(FileViewProvider fileViewProvider) { return new PsiFileBase(fileViewProvider, EXPR_LANGUAGE) { @NotNull @Override public FileType getFileType() { return FILE_TYPE; } @Override public void accept(@NotNull PsiElementVisitor visitor) { visitor.visitFile(this); } }; } @Override public PsiParser createParser(Project project) { return new ExpressionParser(); } @NotNull @Override public PsiElement createElement(ASTNode astNode) { return new BnfCompositeElementImpl(astNode); } public static IElementType createTokenType(String text) { return new IElementType(text, EXPR_LANGUAGE); } }