【问题标题】:Parsing Tokens inside of Strings in Antlr4在 Antlr4 中解析字符串内的令牌
【发布时间】:2018-11-14 03:46:25
【问题描述】:

我正试图弄清楚如何编写语法,该语法将首先解析字符串的输入,然后在找到字符串时解析该字符串。

例如,如果我有这样的输入:

var1 = "world"
someVariable = "hello {{var1}}"

我想要的结果是 someVariable 等于“hello world”。

现在,我了解了如何编写将变量设置为字符串的语法,但我不知道如何解析该字符串以获得 mustache 语法,以便将值注入 var1。

提前致谢!

【问题讨论】:

    标签: python antlr antlr4


    【解决方案1】:

    分两步更容易做到这一点:

    • 像往常一样解析输入(即确定分配,而不分析字符串的内容)
    • 然后评估分配
      • 在将字符串分配给变量时,使用 另一个 解析器(如果语法足够简单,甚至可以只使用正则表达式)解析其内容以确定任何替换。

    【讨论】:

    • 谢谢,我最终用正则表达式实现了这个功能。出于好奇,在 Antlr 中拥有多个解析器是一种好的做法吗?
    • 我不知道“ANTLR 中的良好实践”,但这两种语言主要是两种不同的语言,一种解释字符串,另一种认为只是没有内部语义的数据。
    【解决方案2】:

    这不是 ANTLR 所做的。 ANTLR 肯定可以解析您的输入,甚至单独标记 "hello {{var1}}"1,但它不会评估 var1 并替换它。这是 ANTLR 完成解析后需要做的事情2

    1. 查看有关词汇模式的文档:https://github.com/antlr/antlr4/blob/master/doc/lexer-rules.md#lexical-modes
    2. 此问答展示了一个如何使用访问者评估某事的简单示例:If/else statements in ANTLR using listeners

    【讨论】:

    • 我同意你的看法。我想我的问题可以更具体一些。我已经构建了访问者模式并正在使用变量。我不知道如何使用词法模式分别解析这些字符串的内容。文档很少。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2015-03-23
    • 1970-01-01
    相关资源
    最近更新 更多