有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ANTLR 4支持空格和特殊字符的字符串语法规则

我没有经验,仍在学习语法。我只需要一个支持空格和特殊字符的语法示例,比如!,“,#,$,^,&;。 因为根据我目前的语法和里面的规则,我无法打印出一些支持空格和特殊符号的字符串。我知道空格会被丢弃)

例如,如果我输入:你好,世界
输出为HelloWorld<;-空白和;字符(!)投掷

请看这张图片: problem

为什么

下面是我当前的语法示例。g4

    string
    : '"' (~'"'|'\"')* '"'
    ;

Id
    : Letter(Letter|Digit)*
    ;

Num
    : Digit
    ;

fragment
    Digit
    : [0-9]+
    ;

Letter
    : [a-zA-Z]
    ;


LINE_COMMENT
    : '//' ~[\r\n]* -> skip
    ;

我读到了这个链接: ANTLR parse strings (keep whitespaces) and parse normal identifiers

但我不明白发生了什么。我需要一个建议。谢谢


共 (1) 个答案

  1. # 1 楼答案

    最后我找到了一个能给我答案的人。 他是jim

    下面是他的解决方案: 您正在将字符串的规则声明为解析器规则。
    Lexer规则应该以大写字母开头:STRING:。。。。

    您的字母规则不是一个片段,因此它与Id冲突
    您尚未指定如何处理lexer中的空白,因此它将不匹配并给出一个错误。
    找一本在线教程,或者买这本书,或者更好的是,两者都做

    吉姆


    现在我的问题解决了,我可以打印出带有空格的字符串