可以通过上下文无关语法描述具有字数的语言吗?

时间:2014-01-08 21:58:03

标签: language-agnostic context-free-grammar

我正在研究德国的HBCI / FinTS协议。该协议的一个特点是它可以包含二进制blob,其前缀为@NUM_OF_BINARY_CHARS@。否则协议非常简单,语法可以描述如下(有点简化,终端引用“):

message  = segment+
segment  = elements "'"
elements = element "+" elements | element
element  = items
items    = item ":" items | item
item     = [a-zA-Z0-9,._-]* | escaped item
escaped  = ?[-@?_-a-zA-Z0-9,.]

The @ is missing here!

示例消息可能看起来像这样

FirstSegment+Elem1+Item1:Item2+@4@:'+@+The_last_four_chars_are_binary+Elem4'SecondSegment+Elem5'

这种语言(带有二进制字符串的转义)是否可以通过无上下文语法来描述?

1 个答案:

答案 0 :(得分:2)

不,这种语言不是无上下文的。您描述的格式基本上等同于此语言

  

{@ n @ w | n是自然数和| w | = n}

通过使用无上下文的泵浦引理,您可以证明这不是无上下文的。设泵浦长度为p并考虑弦@ 1 p @x 1111 ... 1(p次)。这是二进制数据的字符串编码,显示长度为111 ... 1(p次)。现在将字符串拆分为u,v,x,y,z,其中| vy | > 1和| vxy | ≤p。如果v或y是@符号,则uv 0 xy 0 z不在语言中,因为它没有足够的@符号。如果v和y纯粹包含在1 p 中,那么抽取字符串将最终生成不在语言中的字符串,因为二进制数据字符串的大小不正确。类似地,如果v和y纯粹包含在x 111 ... 1(p次)中,则向上或向下泵送将使有效载荷的大小错误。最后,如果v在长度字段中并且x在有效载荷中,则同时向上泵送v和x将使有效载荷具有错误的长度,因为v以十进制形式写入(因此每个额外字符将有效载荷大小增加十倍) )而x的长度不是。

希望这有帮助!