当前位置: 首页 > 知识库问答 >
问题:

ANTLR-检查字符串的“构造”

阙博容
2023-03-14

目前正在与ANTLR合作,发现了一些有趣的事情,但并没有按照我的预期工作。

我试着在我的语法中按照“test 10cm”的思路运行一些东西,但失败了,然而“test 10cm”的工作原理与前面的一样。代码的“cm”部分是我在语法中所说的“wholeunit”,如下所示:

wholeunit   :
              siunit
            | unitmod siunit
            | wholeunit NUM
            | wholeunit '/' wholeunit
            | wholeunit '.' wholeunit
            ;

它现在正在做的是规则中的“unitmod siunit”部分,其中unitmod=c和siunit=m。我想知道的是,我该怎么做才能使语法仍然遵循“unitmod siunit”的规则,而不需要在中间留一个空格,我可能遗漏了一些重要的东西。(是的,我有标记为跳过的空格和制表符)

共有1个答案

景德海
2023-03-14

可能的原因是“cm”被认为是另一个标记(可能与“test”的标记类型相同),而不是“c”和“m”作为单独的标记。

记住,在ANTLR lexer中,匹配最长输入的规则获胜。

一种解决方案可能是将wholeunit设置为词法规则,而不是解析器规则,并确保它高于匹配任何单词的规则(如“test”)——如果同一输入可以由多个规则匹配,则ANTLR会按规则中定义的顺序选择第一个规则。

 类似资料:
  • 我正在尝试编写一个ANTLR语法,用于解析字符串插值表达式,例如: 我得到的错误是: MyParser。g4: MyLemus. g4: 像以下这样的表达式可以正常工作: 知道我做错了什么吗?

  • 我将字符串作为解析器规则而不是词法分析器,因为字符串可能包含带有表达式的转义,例如。 这不起作用,因为

  • 我想检查一个字符串是否包含特殊字符,比如!@#$%^&*.,<>/\'“;:?如果字符串至少包含其中一个字符,则返回true。 我尝试使用以下regex脚本:

  • 我想要一个带有ANTLR的规则,将任何字符解析为数字、字符串特殊('@space)等,直到单词FOOTER(不包括) 我要解析的文本是这样的 我尝试使用此代码:在词法分析器中。 在解析器中。 但它不起作用。

  • 问题内容: 如何检查是否是那里的? 我想分配给是否有结果,否则。 我当前的代码是: 问题答案:

  • 我正在处理的arraylist。 我尝试检查数组中的空索引的代码: 我试过了,但不知怎么的,验证不起作用。我想知道怎么做?有没有人知道这个问题的解决方法或工作方法?