【问题标题】:how to create Antlr3 lexer token for word inside string如何为字符串中的单词创建 Antlr3 词法分析器标记
【发布时间】:2018-08-13 14:53:25
【问题描述】:

我想编写一个词法分析器规则来匹配字符串中的某些文本。以下输入必须被标记为词法分析器标记。

  • 'abcd 文本 abcd'
  • '文本'
  • '1234 文本 abcd'
  • "abcd 文本 abcd"
  • “文字”

注意:文字是通用的。


我想要一个词法分析器标记用于所有包含“文本”单词的字符串。

TEXT_STR : ('\'' | '\"') '文本' ('\'' | '\"');

例如:当文本正好在单引号或双引号之间时创建上面的标记(例如:'Text')。但不会为这样的刺伤创建此令牌:

'abcd 文本 abcd'

我希望为所有此类情况创建相同的令牌。我真正需要的是:

单引号或双引号后跟任何字符,然后是“文本”,然后是任何字符,然后是单引号或双引号(匹配起始引号)。

【问题讨论】:

    标签: java antlr3 lexer


    【解决方案1】:
    TEXT_STR
        :   SINGLE_QUOTE (~SINGLE_QUOTE)* 'Text' (~SINGLE_QUOTE)* SINGLE_QUOTE
        |   DOUBLE_QUOTE (~DOUBLE_QUOTE)* 'Text' (~DOUBLE_QUOTE)* DOUBLE_QUOTE
        ;
    
    fragment SINGLE_QUOTE : '\'';
    fragment DOUBLE_QUOTE : '"';
    

    【讨论】:

    • 'Text' 已经是我语法中的一个标记。我收到错误:Decision can match input using multiple alternatives.
    • 那么,'Text' 应该匹配您的其他规则,还是 TEXT_STR
    • 如果文本在引号之外,那么它应该与其他规则匹配。如果它的内部引用然后与 TEXT_STR
    • 我希望在遇到文件中的特定令牌时采取措施。令牌是一个关键字。所以我为那个标记创建了一个词法分析器规则。但是当词法分析器在字符串中看到它时,它就会被执行。我不希望它为内部字符串令牌执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多