上下文无关语法与其他语法有什么区别?

时间:2013-12-31 08:59:59

标签: programming-languages context-free-grammar

哪些语法不是上下文的? 请给我一些非上下文的例子。

这个语法上下文是免费的吗?

A->aSb|aaS|aaaS|B
S->aSb|Bb|lambda
B->Bb|lambda

1 个答案:

答案 0 :(得分:4)

语法是无上下文的,因为左侧没有上下文。见下文。

假设:

  • 像α,β和γ这样的希腊字母是任意制作
  • X和Y等大写字母是非终结符号
  • 像z这样的小写字母是终端符号
  • ε是特殊的空制作

我们有以下定义:

  1. 常规语法是那些可以用以下形式编写规则的语法:

    X: z Y
    X: z
    X: ε
    

    例如:

    Digits: '0' Digits
    Digits: '1' Digits
    Digits: '2' Digits
    ...
    Digits: '9' Digits
    Digits: ε
    
  2. 无上下文语法是指其规则可以采用以下形式编写的语法:

    X: α
    

    换句话说,一次只能转换单个非终结符,而不受周围环境的影响。

    例如:

    Expression: AdditiveExpression
    AdditiveExpression: AdditiveExpression '+' MultiplicativeExpression
    AdditiveExpression: AdditiveExpression '-' MultiplicativeExpression
    AdditiveExpression: MultiplicativeExpression
    MultiplicativeExpression: MultiplicativeExpression '*' PrimaryExpression
    MultiplicativeExpression: MultiplicativeExpression '/' PrimaryExpression
    MultiplicativeExpression: PrimaryExpression
    PrimaryExpression: Number
    PrimaryExpression: '(' Expression ')'
    
  3. 上下文敏感语法是那些可以用以下格式编写规则的语法:

    αXγ: αβγ
    

    换句话说,X周围的上下文可以帮助您决定X应该转换为β,但上下文本身< / em>不会被改变。

    例如:

    Expression: 'x' Foo 'y'
    'x' Foo 'y': 'x' Bar 'y'
    Bar: 'z'
    

    更现实的示例,说明了这有用的原因can be found on Math.StackExchange

  4. 不受限制的语法是那些可以用以下格式编写规则的语法:

    αXγ: β
    

    换句话说,包含非终结符号的任何符号序列都可以被操作到任何其他符号序列中。基本上,这表示任意操作内存,或图灵完整性。

    例如:

    Expression: 'x' Foo 'y'
    'x' Foo 'y': 'z'
    

    你在实践中从未见过这些。