java - 使用正则表达式解析 Java 语法

标签 java

我目前正在我的文本编辑器中开发一个 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/

相关文章:

java - java开发的最佳操作系统?

java - 如何在同一个 Activity 中使用两个不同的OnClickListener?

java nio 无法写入文件,旧式文件可以工作。怎么了?`

Java 常量文件

java - Spring @PathVariable 不起作用

java - 使用spring aop理论授权用户操作

java - BigDecimal(double) 构造函数的不可预测性

java - Couchbase Java API 不返回设定范围的值

Java - LibGDX - isKeyPressed 和 isKeyJustPressed 之间有什么区别?

java - java中将秒转换为时间戳