识别注释时出现 JLex 语法错误
JLex syntax error while recognizing comments
以下是 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.") ;}
没有给出任何错误。这是一个错误还是一些合理的行为?
在许多正则表达式库中,$
是一个 zero-length 断言,表示下一个字符是换行符(或者,在某些情况下,如果输入未终止,则表示输入结束换行)。因为它不匹配下一个字符,如果它用在模式的中间,它后面必须跟一些匹配换行符的东西(比如 \n
),这样做会使 $
多余。
在 JLex 中,与在原始 Lex 中一样,$
只能用在模式的 末尾 ,这确实是唯一有意义的地方.在你的情况下,我很确定你可以只写 [^*]
而不是 ($|[^*])
(例如),因为 "anything but a *
" 包含换行符。
以下是 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.") ;}
没有给出任何错误。这是一个错误还是一些合理的行为?
在许多正则表达式库中,$
是一个 zero-length 断言,表示下一个字符是换行符(或者,在某些情况下,如果输入未终止,则表示输入结束换行)。因为它不匹配下一个字符,如果它用在模式的中间,它后面必须跟一些匹配换行符的东西(比如 \n
),这样做会使 $
多余。
在 JLex 中,与在原始 Lex 中一样,$
只能用在模式的 末尾 ,这确实是唯一有意义的地方.在你的情况下,我很确定你可以只写 [^*]
而不是 ($|[^*])
(例如),因为 "anything but a *
" 包含换行符。