在 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.
- 查看有关词法模式的文档:https://github.com/antlr/antlr4/blob/master/doc/lexer-rules.md#lexical-modes
- 此问答展示了一个简单示例,说明如何使用访问者来评估某些内容:If/else statements in ANTLR using listeners
分两步更简单:
- 像往常一样解析输入(即确定赋值,而不分析字符串的内容)
- 然后评估作业
- 在将字符串分配给变量时,使用 另一个 解析器解析其内容(如果语法足够简单,甚至可能只使用正则表达式)以确定任何替换。
我正在思考如何编写语法,该语法首先解析输入的字符串,然后在找到字符串时解析该字符串。
例如,如果我有这样的输入:
var1 = "world"
someVariable = "hello {{var1}}"
我想要的结果是 someVariable 等于 "hello world"。
现在,我了解了如何编写将变量设置为字符串的语法,但我无法弄清楚的是如何为 mustache 语法解析该字符串以便将值注入 var1。
提前致谢!
那不是 ANTLR 所做的。 ANTLR 肯定可以解析您的输入,甚至可以分别标记 "hello {{var1}}"
1,但它不会评估 var1
并替换它。这是你在 ANTLR 完成解析后需要做的事情2.
- 查看有关词法模式的文档:https://github.com/antlr/antlr4/blob/master/doc/lexer-rules.md#lexical-modes
- 此问答展示了一个简单示例,说明如何使用访问者来评估某些内容:If/else statements in ANTLR using listeners
分两步更简单:
- 像往常一样解析输入(即确定赋值,而不分析字符串的内容)
- 然后评估作业
- 在将字符串分配给变量时,使用 另一个 解析器解析其内容(如果语法足够简单,甚至可能只使用正则表达式)以确定任何替换。