Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 识别注释时出现JLex语法错误_Java_Lexical Analysis - Fatal编程技术网

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

Java 识别注释时出现JLex语法错误,java,lexical-analysis,Java,Lexical Analysis,下面是一个文件的代码片段,example.lex,用于识别(*…*)形式的注释: <YYINITIAL> \(\*(([^\(*]|\(($|[^*])|\*($|[^\)]))*)\*\) {System.out.println("A comment.") ;} 但是,正则表达式似乎具有正确的语法。因此,问题似乎与JLex有关 欢迎提供解决此问题的任何提示 编辑:嗯,似乎JLex在$方面有问题。例如: <YYINITIAL> 5($|5) {System.out.p

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

<YYINITIAL>  \(\*(([^\(*]|\(($|[^*])|\*($|[^\)]))*)\*\) {System.out.println("A comment.") ;}
但是,正则表达式似乎具有正确的语法。因此,问题似乎与JLex有关

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

编辑:嗯,似乎JLex在
$
方面有问题。例如:

<YYINITIAL> 5($|5) {System.out.println("A dollar.") ;}
5($| 5){System.out.println(“一美元”);}
给出了相同的错误。
鉴于

<YYINITIAL> 5$ {System.out.println("A dollar.") ;}
5${System.out.println(“一美元”);}

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

在许多正则表达式库中,
$
是一个零长度断言,指示下一个字符是换行符(或者,在某些情况下,如果输入未以换行符终止,则为输入的结尾)。因为它与下一个字符不匹配,如果它在一个模式的中间使用,则必须遵循一些与新行相匹配的东西(例如<代码> \n>代码>),这样做会使<代码> $< /代码>冗余。
在JLex中,正如在最初的Lex中一样,
$
只能在模式的末尾使用,这是唯一有意义的地方。在您的情况下,我很确定您可以编写
[^*]
而不是
($|[^*])
(例如),因为“除
*
以外的任何内容”都包含换行符

谢谢你的回答!
<YYINITIAL> 5$ {System.out.println("A dollar.") ;}