Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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语言解析器中正确标记符号?_Java_Parsing_Grammar_Token_Language Details - Fatal编程技术网

'@';在Java语言解析器中正确标记符号?

'@';在Java语言解析器中正确标记符号?,java,parsing,grammar,token,language-details,Java,Parsing,Grammar,Token,Language Details,我正在开发一个Java源代码解析器,遵循和规范 不过,我还是被注释卡住了;有关规则如下: Annotation: @ QualifiedIdentifier [ ( [AnnotationElement] ) ] AnnotationTypeDeclaration: @ interface Identifier AnnotationTypeBody 但是我在词法规范中没有看到提到的@符号。标记@的正确规则是什么,或者在哪里可以找到这样的规则 我意识到我可以很容易地为此添加一个

我正在开发一个Java源代码解析器,遵循和规范

不过,我还是被注释卡住了;有关规则如下:

Annotation:
    @ QualifiedIdentifier [ ( [AnnotationElement] ) ]

AnnotationTypeDeclaration:
    @ interface Identifier AnnotationTypeBody
但是我在词法规范中没有看到提到的
@
符号。标记
@
的正确规则是什么,或者在哪里可以找到这样的规则

我意识到我可以很容易地为此添加一个标记定义,它甚至可以工作——有时。但如果可能的话,我更愿意按照规范正确操作。

在中,它说:

请注意,at符号(@)和关键字接口是两个不同的标记。从技术上讲,可以用空格分隔它们,但从风格上讲,这是不可取的


您是正确的,因为在JLS的“3.词汇结构”部分中,“@”既不是运算符也不是标点符号

但是,它在JLS 9.6以及“18.Collected Syntax”部分中用作一个符号,因此很明显,您的lexer应该将其视为一个符号


这只是一个次要的编辑问题,在实现Java解析器时不应该引起任何关注。

有趣!这些规则意味着
@SomeAnnotation public@interface Foo{}
是有效的,而且编译器似乎并不抱怨添加的空白。所以它看起来像是一个单独的令牌(尽管它的格式通常在它和下一个令牌之间没有空格)。这正是我想要的,谢谢。显而易见的方法——一个新的令牌,它只是
@
——是实现这个令牌的正确方法吗?