![](/img/trans.png)
[英]How to replace two double quotes with a single double quote in Java String?
[英]How to use single quote string and double quote single with antlr at the same time?
我在antlr3中遇到一个问题,我想描述单引号字符串,双引号字符串和复合引号字符串。 但代码无法编译。
SingleQuoteString
:
'\'' ( ~('\''|'\\') | ('\\' .) )* '\''
;
DoubleQuoteString
:
'\"' ( ~('\"'|'\\') | ('\\' .) )* '\"'
;
StringLiteral
:
(SingleQuoteString|DoubleQuoteString)+
;
报告的错误是SingleQuoteString与StringLiteral存在冲突。
可以在不同的时间使用这三种字符串。
真的是有冲突DoubleQuoteString
和StringLiteral
,也与SingleQuoteString
和StringLiteral
- StringLiteral
可以匹配任何一个SingleQuoteString
可以匹配(及以上)。
请记住,我们正在讨论词法分析器规则,而不是解析器规则(ANTLR惯例说大写第一个字母表示词法规则)。 而lexer不能根据任何情况做出决定。 它必须发出一个令牌。 例如,在读取'abc'
时它应该发出哪个令牌? 它应该发出SingleQuoteString
还是StringLiteral
? 输入匹配两者,而lexer没有其他上下文。
解决这个问题的方法是使StringLiteral
成为解析器规则而不是词法分析器规则。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.