我是Antlr的新手,我正在尝试编写语法以选择性地将字符串示为字符串。我非常感谢有关在哪里寻找的任何帮助/指示,以及实施此操作的方法。
例如,字符串"禁用"出现在设备的各个地方的输出中,
section1 {
property1 disabled
}
section2 {
disabled
}
section3 {
property2 disabled
}
语法:
section2
: 'section2' '{'
'disabled' a_disabled=NL
'}'
;
这最终将字符串"禁用"引起,从而将"分配给property1和propert2,而意图是在第2节中对"禁用"并将其分配给a_disabled。预期的JSON输出将是:
{"section1":
{
"property1": "disabled"
},
"section2":
{
"disabled": "true",
},
"section3":
{
"property2": "disabled"
},
}
我编写了代码以正确分配节2:禁用为" true",但是属性1和属性2值被分配了"。
{"section1":
{
"property1": ""
},
"section2":
{
"disabled": "true",
},
"section3":
{
"property2": ""
},
}
ANTLR调试输出表明,"禁用"的所有出现都被标记化。
做到这一点的最佳方法是什么?经过文档后,似乎模式或语义谓词将起作用。我们还使用Antlr 4.7并进行。
我不太确定您想从描述中实现什么,而且还不清楚您如何选择'选择性地将字符串化',但是该语法呢:
section: ID '{' ID? 'disabled' '}'
WS : [ nu000D] -> skip ;
ID : [a-zA-Z] [a-zA-Z0-9]* ;
然后将其余的作为对解析树的操作?如果您提供了更多信息,我将更新答案。