哪些语法不是上下文的? 请给我一些非上下文的例子。
这个语法上下文是免费的吗?
A->aSb|aaS|aaaS|B
S->aSb|Bb|lambda
B->Bb|lambda
答案 0 :(得分:4)
语法是无上下文的,因为左侧没有上下文。见下文。
假设:
我们有以下定义:
常规语法是那些可以用以下形式编写规则的语法:
X: z Y
X: z
X: ε
例如:
Digits: '0' Digits
Digits: '1' Digits
Digits: '2' Digits
...
Digits: '9' Digits
Digits: ε
无上下文语法是指其规则可以采用以下形式编写的语法:
X: α
换句话说,一次只能转换单个非终结符,而不受周围环境的影响。
例如:
Expression: AdditiveExpression
AdditiveExpression: AdditiveExpression '+' MultiplicativeExpression
AdditiveExpression: AdditiveExpression '-' MultiplicativeExpression
AdditiveExpression: MultiplicativeExpression
MultiplicativeExpression: MultiplicativeExpression '*' PrimaryExpression
MultiplicativeExpression: MultiplicativeExpression '/' PrimaryExpression
MultiplicativeExpression: PrimaryExpression
PrimaryExpression: Number
PrimaryExpression: '(' Expression ')'
上下文敏感语法是那些可以用以下格式编写规则的语法:
αXγ: αβγ
换句话说,X
周围的上下文可以帮助您决定X
应该转换为β
,但上下文本身< / em>不会被改变。
例如:
Expression: 'x' Foo 'y'
'x' Foo 'y': 'x' Bar 'y'
Bar: 'z'
更现实的示例,说明了这有用的原因can be found on Math.StackExchange。
不受限制的语法是那些可以用以下格式编写规则的语法:
αXγ: β
换句话说,包含非终结符号的任何符号序列都可以被操作到任何其他符号序列中。基本上,这表示任意操作内存,或图灵完整性。
例如:
Expression: 'x' Foo 'y'
'x' Foo 'y': 'z'
你在实践中从未见过这些。