视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Java开发工具IntelliJ IDEA使用教程:定义语法和解析器
2025-10-02 15:00:02 责编:小OO
文档
1 复制解析器工具类

将语法插件需要的GeneratedParserUtilBase类复制到你的源文件中。

2 定义单点登录类型

package com.simpleplugin.psi;

import com.intellij.psi.tree.IElementType;

import com.simpleplugin.SimpleLanguage;

import org.jetbrains.annotations.NonNls;

import org.jetbrains.annotations.NotNull;

public class SimpleTokenType extends IElementType {

public SimpleTokenType(@NotNull @NonNls String debugName) { super(debugName, SimpleLanguage.INSTANCE);

}

@Override

public String toString() {

return "SimpleTokenType." + super.toString();

}

}

3 定义元素类型

package com.simpleplugin.psi;

import com.intellij.psi.tree.IElementType;

import com.simpleplugin.SimpleLanguage;

import org.jetbrains.annotations.NonNls;

import org.jetbrains.annotations.NotNull;

public class SimpleElementType extends IElementType {

public SimpleElementType(@NotNull @NonNls String debugName) { super(debugName, SimpleLanguage.INSTANCE);

}

}

4 定义语法

以/com/simpleplugin/Simple.bnf文件定义属性语言语法。

{

parserClass="com.simpleplugin.parser.SimpleParser" stubParserClass="com.simpleplugin.parser.GeneratedParserUtilBase"

extends="com.intellij.extapi.psi.ASTWrapperPsiElement"

psiClassPrefix="Simple"

psiImplClassSuffix="Impl"

psiPackage="com.simpleplugin.psi"

psiImplPackage="com.simpleplugin.psi.impl"

elementTypeHolderClass="com.simpleplugin.psi.SimpleTypes" elementTypeClass="com.simpleplugin.psi.SimpleElementType" tokenTypeClass="com.simpleplugin.psi.SimpleTokenType"

}

simpleFile ::= item_*

private item_ ::= (property|COMMENT|CRLF)

property ::= (KEY? SEPARATOR VALUE?) | KEY

这样一个属性文件就可以包含属性、评论和换行了。

语法定义可以使语言支持变得简单,我们制定的属性有值也可能没有值。我们指定一个属性可能有也可能没有键和值。这让IDE仍然能够识别错误定义的属性,并提供相应的代码分析和快速修正。

5 生成分析器

当语法定义之后,用户就可以通过右键菜单的Generate Parser Code或者是通过Simple.bnf 文件中的⌘⇧G快捷方式根据PSI类生成解析器。Grammar-Kit将在gen文件中生成一个的语法工具解析器和PSI元素。将这个文件夹作为源根,并确保编译没有错误。

下载本文

显示全文
专题