有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何避免使用Java正则表达式预处理字符串文本中的注释

我正在为我这学期的课程编译器构建做一个小项目

我现在正在用Java语言为Java语言设计扫描仪部分。 此扫描程序将生成令牌,稍后将用于解析器

我所做的大部分工作都是使用Java正则表达式。 我目前面临的问题是,当我预处理代码以删除内联&;多行注释,它还删除字符串文本中的注释(如果有)。 我正在使用以下正则表达式:

String regExPreProcess = "((?s)(/\\*.*?\\*/|/\\*.*))|(//.*)"

有人能解释一下这个问题吗。我试过向前看&;lookback功能也是如此,但问题仍然存在


共 (1) 个答案

  1. # 1 楼答案

    首先需要对内联和块(多行)注释进行正式定义

    比如:

    • 内联注释以放置在字符串文本和块注释外部的内联注释delimeter(//)开始,并在行尾结束
    • 字符串文字以放置在内联或块注释外部的双引号(“)开始,以未转义的双引号(“)结束
    • 转义双引号是一个双引号,前面有奇数个反斜杠(\)
    • 块注释以放置在字符串文字和内联注释之外的注释开始,以注释结束,以注释结束,以delimeter(*/)

    如您所见,这些定义中存在循环依赖关系。正则表达式不适合这个问题。您需要按顺序处理输入文本:检测开始标记并忽略所有内容,直到相应的结束标记