我们使用的当前加价在以下部分中进行了说明。它主要是由于灵活性而创建的,但我们并不介意改变它。
在我能给出的最简单的例子中,这里有一些标记:
interface Serial0/0/0:1
description <<! variable, data_t1_port_size, Data T1 Port Size in kbps !>> kbps MPLS; <<!variable, data_t1_carrier_name, Data T1 Carrier Name !>>; Ckt <<! variable, data_t1_carrier_circuit_id, Data T1 Carrier Circuit ID !>>
bandwidth <<! variable, data_t1_port_size, Data T1 Port Size in kbps !>>
标记语言的简要注释:
interface Serial0/0/0:1 (inline static config)
description <<! variable, [variableValue], [variableDescription] !>> kbps MPLS; <<!variable, [variableValue], [variableDescription] !>>; Ckt <<! variable, [variableValue], [variableDescription] !>>
bandwidth <<! variable, [variableValue], [variableDescription] !>>
这是路由器配置 用户可以通过填写Web GUI中的值来输入variableValue (显示变量描述的标签将显示,以便他们知道什么 他们正在进入。)
最终目标是解析内联变量并且是 能够生成这样的东西:
interface Serial0/0/0:1
description 1544 kbps MPLS; Verizon; Ckt 123456789
bandwidth 1544
我的问题是: 是否有可用于执行此操作的常用标记语言(我们始终可以更改模板)?
要求是:
答案 0 :(得分:0)
我认为在这种情况下你可能会发现ANTLR过于严格。它对编程语言很方便,而不是模糊的文本&#34;。
还有很多工作要做。您必须决定是否在Lexer中进行此操作(即,您以某种方式使其对上下文敏感),Parser或在后期处理期间。
例如,如果您决定&#34; interface&#34;将是您语法中的保留关键字,然后您不得使用单词&#34; interface&#34;在描述部分。 这可能会让用户感到困惑。但另一方面,Lexer和Parser很容易实现。 (当你强制描述为双引号时,这个问题会消失)。
所以我认为ANTLR会在第一阶段帮助你。当您在项目中进行多次迭代并且必须多次重构解析器时,ANTLR非常方便。
但另一方面,一些角落案例可能很难理清。
也许最好的方法是如何开始为解析器准备(收集)更大的代表性输入。
然后你应该决定Lexer是否只识别特殊标签(&#34;&lt;&gt;&#34;)或者它是否也支持关键字。执行带引号的字符串会使解析变得更容易,但我不知道用户会对它感到满意。
PS:你也可以例如强制变量名以#34; $&#34;开头。 (或&#34; @&#34;)在Lexing期间将它们与其他任何东西区分开来。