我目前正在我的文本编辑器中开发一个 Java 校正器。为此,我认为最好的方法是使用 Pattern 来查找 java 语法元素(导入或包声明、类或方法声明...)。我已经写了其中一些模式:
private String regimport = "^import(\\s+)(static |)(\\w+\\.)*(\\w+)(\\s*);(\\s*)$",
regpackage="^package(\\s+)[\\w+\\.]*[\\w+](\\s*);(\\s*)$",
regclass="^((public(\\s+)abstract)|(abstract)|(public)|(final)|(public(\\s+)final)|)(\\s+)class(\\s+)(\\w+)(((\\s+)(extends|implements)(\\s+)(\\w+))|)(\\s*)(\\{)?(\\s*)$";
目前来说不是很难,但恐怕需要很长时间才能实现。有人知道类似的东西是否已经存在吗?
最佳答案
To do so I think the best way is to use Pattern to look for element of java syntax
不正确。正则表达式模式无法充分识别 Java 语法元素。这就是存在更复杂的解析器的原因。举一个简单的例子,想象一下如何避免注释中保留字的错误匹配,例如以下
/* this is not importing anything
import java.util.*;
*/
但是如果你非常热衷于使用正则表达式,并且愿意花费大量的精力,可以看看 Emacs
font-lock-mode
,它使用正则表达式来识别语法元素并对其进行字体化。
PS:我提到的“大量努力”是指学习 Emacs
的工作原理、阅读 elisp
代码以及翻译 Emacs
正则表达式到 Java。如果您已经知道所有这些,那么您将需要更少的努力。
关于java - 使用正则表达式解析 Java 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12713535/