在 Antlr4 中解析字符串内的标记

Parsing Tokens inside of Strings in Antlr4

我正在思考如何编写语法,该语法首先解析输入的字符串,然后在找到字符串时解析该字符串。

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

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

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

现在,我了解了如何编写将变量设置为字符串的语法,但我无法弄清楚的是如何为 mustache 语法解析该字符串以便将值注入 var1。

提前致谢!

那不是 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

分两步更简单:

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