gpt4 book ai didi

java - 识别注释时出现 JLex 语法错误

转载 作者:行者123 更新时间:2023-12-02 11:32:06 34 4
gpt4 key购买 nike

以下是 JLex 的代码片段文件 example.lex,用于识别 (*...*) 形式的注释:

<YYINITIAL>  \(\*(([^\(*]|\(($|[^*])|\*($|[^\)]))*)\*\) {System.out.println("A comment.") ;}

它是 .lex 文件的第 81 行。 JLex 给出的错误是:

C:\JAVA>java JLex.Main example.lex
Processing first section -- user code.
Processing second section -- JLex declarations.
Processing third section -- lexical rules.
Creating NFA machine representation.
Error: Parse error at line 81.
Description: Syntax error.
Parse error.

但是,根据this,正则表达式似乎具有正确的语法。 。所以,问题似乎是 JLex 特有的。

欢迎提供有关解决此问题的任何提示!

编辑:嗯,看来 JLex 在 $ 方面存在问题。例如:

<YYINITIAL> 5($|5) {System.out.println("A dollar.") ;}

给出同样的错误。
鉴于,

<YYINITIAL> 5$ {System.out.println("A dollar.") ;}

没有给出任何错误。这是一个错误还是一些合理的行为?

最佳答案

在许多正则表达式库中,$ 是一个零长度断言,指示下一个字符是换行符(或者,在某些情况下,如果输入不是以换行符)。由于它与下一个字符不匹配,因此如果在模式中间使用它,则后面必须跟有与换行符匹配的内容(例如 \n),这样做会使 $ 变得多余。

在 JLex 中,就像在原始 Lex 中一样,$ 只能用在模式的末尾,这实际上是唯一有意义的地方。就你而言,我很确定你可以只写 [^*] 而不是 ($|[^*]) (例如),因为“除了a *"包含换行符。

关于java - 识别注释时出现 JLex 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49222429/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com