Java开发工具IntelliJ IDEA定义语法和解析器详细说明

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元素。将这个文件夹作为源根,并确保编译没有错误。

》》》Intelli IDEA官方最新版免费下载地址

转载于:https://my.oschina.net/u/1259237/blog/167594

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值