在我的输入中,以*
开头的行是注释行,除非它以*
或*-
开头。我可以忽略这些评论,但需要得到其他评论。
这是我的lexer规则:
WhiteSpaces : [ \t]+;
Newlines : [\r\n]+;
Commnent : '*' .*? Newlines -> skip ;
SkipTokens : (WhiteSpaces | Newlines) -> skip;
例如:
* this is a comment line
** another comment line
*+ type value
所以,前两个是注释行,我可以跳过它。但是我不知道定义可以捕获最后一行的词法分析器/解析器规则。
将永远不会匹配您的SkipTokens
lexer规则,因为规则空格和新行都放在它前面。参见此Q
要使其按预期工作,请执行以下操作:
SkipTokens : (WhiteSpaces | Newlines) -> skip;
fragment WhiteSpaces : [ \t]+;
fragment Newlines : [\r\n]+;
什么是片段,检查这个Q
现在,回答你的问题。您定义了一条注释规则,使其始终以换行符结束。这意味着在输入的末尾不能有注释。因此,您应该让注释以换行符或EOF结尾。
像这样的事情应该可以做到:
COMMENT
: '*' ~[+\-\r\n] ~[\r\n]* // a '*' must be followed by something other than '+', '-' or a line break
| '*' ( [\r\n]+ | EOF ) // a '*' is a valid comment if directly followed by a line break, or the EOF
;
STAR_MINUS
: '*-'
;
STAR_PLUS
: '*+'
;
SPACES
: [ \t\r\n]+ -> skip
;
当然,这并不要求将
*置于行的开头。如果需要,请签出此Q
这里是我的源代码:
问题内容: 我有一个JSON文件,我正在尝试处理,但出现以下错误: 线程“主” org.json.JSONException中的异常:JSONObject文本必须在org.json.JSONObject的org.json.JSONTokener.syntaxError(JSONTokener.java:433)的1 [字符2行1]处以“ {”开头。(JSONObject.java:195)位于or
我试图编写一个简单的复数计算器,可以计算以下表达式: 输入1:(10 30i)(90 20i) 预期输出:(100 50i) 输入2:(10 30i)-(90 20i) 预期输出:(-80 10i) 编辑:我注意到第一次前瞻读取是10而不是40(ascii值 '(' ) . 我如何解决这个问题? 我的代码: 但它总是输出“对不起,我帮不了你。”
我在一个项目中工作,那里给了我一个允许的字符列表,并要求我删除不需要的字符。我已经完成了以下工作,但我觉得它很麻烦,而且超出了应有的范围 在测试启动条件时,我添加了三个检查。contains检查为空字符串大小写返回true,因此我添加了字符串长度条件,以便为空字符串大小写返回NULL。 我用于测试的XML如下 我可能遗漏了任何边缘情况,我的问题是,有没有更好的方法来解决起始字符和连续字符是有条件的
我正在写一个程序,必须解码二维码。代码在内部表示为二维布尔列表。代码通常被读取为包含1和0的文本文件,其中1表示矩阵中的暗模块(true),0表示亮模块(false)。 我必须实现一个方法,它将接受一个输入流,然后必须返回一个QR码。我必须读. txt,它包含1、0和以“#”开头的注释行。我需要使该方法忽略这些注释行,但我不知道如何做到这一点。 以下是代码的一些相关部分: 首先QR码构造函数(构造
问题内容: 我有一个看起来像这样的字符串: 我如何删除第一个; 但只有在字符串的开头找到它? 使用,将删除 所有 。 问题答案: 普通格式,不带正则表达式: 花费: 0.0369毫秒 (0.000,036,954秒) 与: 注意到: 0.1749毫秒 (0.000,174,999秒)第一次运行(编译),和 0.0510毫秒 (0.000,051,021秒)之后。 显然,已在我的服务器上进行了分析。