C “一词”;上下文“;在编程语言中,加载和更新如何影响上下文?
在上下文无关和上下文敏感的语言中,上下文是什么意思?一个变量可以有多个上下文吗?如果我需要在特定的内存地址中存储特定的值,那么如何影响内存地址的上下文?如果我想更新一个变量,变量的上下文是如何变化的?请考虑以下C程序:C “一词”;上下文“;在编程语言中,加载和更新如何影响上下文?,c,compiler-construction,grammar,context-free-grammar,formal-languages,C,Compiler Construction,Grammar,Context Free Grammar,Formal Languages,在上下文无关和上下文敏感的语言中,上下文是什么意思?一个变量可以有多个上下文吗?如果我需要在特定的内存地址中存储特定的值,那么如何影响内存地址的上下文?如果我想更新一个变量,变量的上下文是如何变化的?请考虑以下C程序: #include <stdio.h> unsigned int my_value = 0; void print_value(void) { printf("My value: %d\n", my_value); } int main(void) {
#include <stdio.h>
unsigned int my_value = 0;
void print_value(void)
{
printf("My value: %d\n", my_value);
}
int main(void)
{
int my_value = 5;
printf("My main value: %d\n", my_value);
print_value();
return 0;
}
原因是变量my_value
链接到main
函数中定义的my_value
和print_value
函数中定义的全局变量。大多数语言,如C,都有变量定义的上下文,允许变量的隐藏:在块内部定义的变量({
和}
符号之间的区域)不会覆盖变量名的先前定义,而是在块的上下文中“隐藏”它们
有些语言是不区分上下文的,从定义开始到程序退出都有名称。用这些语言更新变量将在程序范围内更新其值。考虑以下C程序:
#include <stdio.h>
unsigned int my_value = 0;
void print_value(void)
{
printf("My value: %d\n", my_value);
}
int main(void)
{
int my_value = 5;
printf("My main value: %d\n", my_value);
print_value();
return 0;
}
原因是变量my_value
链接到main
函数中定义的my_value
和print_value
函数中定义的全局变量。大多数语言,如C,都有变量定义的上下文,允许变量的隐藏:在块内部定义的变量({
和}
符号之间的区域)不会覆盖变量名的先前定义,而是在块的上下文中“隐藏”它们
有些语言是不区分上下文的,从定义开始到程序退出都有名称。用这些语言更新变量将在程序范围内更新其值。作为上下文敏感语法,产品具有一般形式
aBc -> ab'c
其中,大写符号为非端子,小写符号为端子和非端子序列
在上面的示例中,a
和b
将是非终端b
的上下文,并且指示b
仅当被a
和c
包围时才可以“扩展”到b'
在上下文无关语法中,产品可能如下所示
B -> b'
i、 e.B
“扩展”到B'
,不管它周围有什么,换句话说,不管上下文。上下文敏感语法,产品具有一般形式
aBc -> ab'c
其中,大写符号为非端子,小写符号为端子和非端子序列
在上面的示例中,a
和b
将是非终端b
的上下文,并且指示b
仅当被a
和c
包围时才可以“扩展”到b'
在上下文无关语法中,产品可能如下所示
B -> b'
i、 e.B
“扩展”到B'
,不管它周围有什么,换句话说,不管上下文。我想你指的是同一个词的不同含义。如果没有更多的上下文(没有双关语的意思),你就不可能回答你。在解析上下文中,“上下文无关”和“上下文敏感”可能指语法。解析阶段没有内存地址。我想您指的是同一个单词的不同含义。如果没有更多的上下文(没有双关语的意思),你就不可能回答你。在解析上下文中,“上下文无关”和“上下文敏感”可能指语法。解析阶段没有内存地址。