Use Grammar-Kit parser standalone
已回答
Hello,
I am developing a language plugin for Intellij IDEA.
I want to use my parser in conjunction with other applications outside of the IDE as well.
- Am I allowed to do this?
- How do I achieve: "file.x" -> PsiFile and use it (read-only) in other Java applications?
Best Regards
请先登录再写评论。
The main dependencies are PsiBuilderImpl and GeneratedParserUtilBase classes.
You can tear off unrelated code leaving only what's needed in your case.
You can also play with standalone Grammar-Kit light-psi-all.jar and LightPsi.java.
There're expression-console-sample artifact and light-psi run configuration in Grammar-Kit project.
Thanks I got it working by using
and with light-psi-all.jar.
When I run my simple example the instance is still blocking. How can I close it programmatically? Is there something like .close() .disconnect() I do not see? Or is System.exit(0); the way to go?
public static void main(String[] args){
try {
File file = new File(CountKeywords.class.getResource("/example.x").getFile());
PsiFile psiFile = XStandaloneParser.parse(file);
PsiElement root = psiFile.getNode().getPsi();
Collection<PsiElement> keywords = PsiTreeUtil.findChildrenOfType(root, XKeyword.class);
System.out.println("There are " + keywords.size() + " keywords.");
}catch (IOException ex){
ex.printStackTrace();
}
}
public static PsiFile parse(File file) throws IOException {
try {
return LightPsi.parseFile(file, new XParserDefinition());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}