繁体   English   中英

如何使用单引号字符串和双引号同时与antlr?

[英]How to use single quote string and double quote single with antlr at the same time?

我在antlr3中遇到一个问题,我想描述单引号字符串,双引号字符串和复合引号字符串。 但代码无法编译。

SingleQuoteString
    :
    '\'' ( ~('\''|'\\') | ('\\' .) )* '\''
    ;

DoubleQuoteString
    :
    '\"' ( ~('\"'|'\\') | ('\\' .) )* '\"'
    ;

StringLiteral
    :
    (SingleQuoteString|DoubleQuoteString)+
    ;

报告的错误是SingleQuoteString与StringLiteral存在冲突。

可以在不同的时间使用这三种字符串。

真的是有冲突DoubleQuoteStringStringLiteral ,也与SingleQuoteStringStringLiteral - StringLiteral可以匹配任何一个SingleQuoteString可以匹配(及以上)。

请记住,我们正在讨论词法分析器规则,而不是解析器规则(ANTLR惯例说大写第一个字母表示词法规则)。 而lexer不能根据任何情况做出决定。 它必须发出一个令牌。 例如,在读取'abc'时它应该发出哪个令牌? 它应该发出SingleQuoteString还是StringLiteral 输入匹配两者,而lexer没有其他上下文。

解决这个问题的方法是使StringLiteral成为解析器规则而不是词法分析器规则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM