我是Antlr的新手,我正在尝试编写语法来选择性地标记字符串。我真的很感激任何关于在哪里寻找的帮助/指针以及实现这一目标的方法。
例如,字符串“disabled”出现在各个地方的设备输出中,
section1 {
property1 disabled
}
section2 {
disabled
}
section3 {
property2 disabled
}
语法:
section2
: 'section2' '{'
'disabled' a_disabled=NL
'}'
;
这最终会对字符串'disabled'进行标记,从而导致将“”分配给property1和property2,而意图是将第2部分中的“disabled”标记为“disabled”并将其分配给a_disabled。 预期的json输出为:
{"section1":
{
"property1": "disabled"
},
"section2":
{
"disabled": "true",
},
"section3":
{
"property2": "disabled"
},
}
我编写的代码是为了正确地将section2:disabled分配给“true”,但是因为这个而将property1和property2值赋值为“”。
{"section1":
{
"property1": ""
},
"section2":
{
"disabled": "true",
},
"section3":
{
"property2": ""
},
}
Antlr调试输出显示所有出现的“已禁用”都被标记化。
实现这一目标的最佳方法是什么?通过文档后,模式或语义谓词似乎可行。我们也在使用Antlr 4.7和Go。
答案 0 :(得分:0)
我不太确定你要从描述中实现什么,而且还不清楚你想如何“选择性地标记字符串”,但是这个语法怎么样:
section: ID '{' ID? 'disabled' '}'
WS : [ \n\u000D] -> skip ;
ID : [a-zA-Z] [a-zA-Z0-9]* ;
然后在解析树上执行其余的操作?如果您提供更多信息,我会更新答案。