当前位置:首页 » 编程语言 » 求上下无关文法的c语言代码
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

求上下无关文法的c语言代码

发布时间: 2022-11-18 12:37:57

❶ 求c语言笑脸可上下左右的代码

先在程序定义一个在屏幕中运动的点的结构:

struct move_point

{

int x, y;/*该点的位置,包括x坐标和y坐标*/

int xv, yv;/*该点在x轴、y轴的速度*/

};

运动的原理是,先擦去物体先前的轨迹,让物体按其速度移动一段距离,再画出该物体让我们看到以下代码:

gotoxy(man.x, man.y);/*把光标移到指定的坐标*/

printf(““);/*输出一个空格,把先前的字符擦去*/

然后我们让物体按其速度运动:

man.x += man.xv;/*水平方向按x轴的速度运动*/

man.y += man.yv;/*垂直方向按y轴的速度运动*/

运动后还要判断物体是否出界,如果出了界,就令物体反弹,即让它下一刻的速度等于现在的速度的相反数最后打印出这个笑脸:

gotoxy(man.x, man.y);

printf(“%c\b”, 2); /*输出ASCII码值为2的“笑脸”字符*/
望采纳,谢谢

❷ c语言题目 求代码

#include <stdio.h>


int main()

{

int a[5],i,t;

printf("input array:");

for(i=0;i<5;++i)

scanf("%d",&a[i]);

printf("input number:");

scanf("%d",&t);

for(i=0;i<5;++i)

if(a[i]==t)

{

printf("i=%d ",i);

}

if(i==5)

{

printf("error ");

}

return 0;

}

❸ 写出C语言中if语句上下无关文法的完整定义

if (条件) then (语句1) [else (语句2)];
就是计算条件表达式,如果为真(True),那么执行语句1,方括号[]内的语句可以不要,如果存在else语句,那么执行语句2
举个例子:

var
a:longint;
begin
read(a);//读入一个数
if (a=1) then writeln('a=1')//如果输入的数是1,那么输出a=1
else writeln('a<>1');//否则输出a<>1
end.

❹ 求C语言代码啊啊啊!

importjava.util.Scanner;
/**
*CreatedbyDELLon2019/5/9.
*/
publicclassTest2Main{
staticintb[][]=newint[1][1];
staticintc[][]=newint[2][2];

publicstaticvoidmain(String[]args){
b[0][0]=1;
c[0][0]=1;
c[1][0]=2;
c[0][1]=4;
c[1][1]=3;
Scannersc=newScanner(System.in);
while(true){
System.out.println("请输入右旋方阵阶数:(输入“0”,退出程序)");
inti=sc.nextInt();
while(!checkNumber(i)){
i=sc.nextInt();
}
switch(i){
case1:
System.out.println("1 ");
break;
case2:
System.out.println("14 23 ");
break;
case0:
System.exit(0);
break;
default:
inta[][]=getData1(i);
for(intk=0;k<i;k++){
for(intl=0;l<i;l++){
System.out.print(" "+a[k][l]+"");
}
System.out.println("");
}
break;
}

}
}
privatestaticint[][]getData1(inti){
inta[][]=newint[i][i];
if(i==1){
returnb;
}
if(i==2){
returnc;
}
intd[][]=getData1(i-2);
for(intn=0;n<i;n++){
a[n][0]=n+1;
}
for(intn=1;n<i;n++){
a[i-1][n]=a[i-1][0]+n;
}
for(intn=i-2;n>=0;n--){
a[n][i-1]=a[n+1][i-1]+1;
}
for(intn=i-2;n>0;n--){
a[0][n]=a[0][n+1]+1;
}

for(intl=0;l<i-2;l++){
for(intk=0;k<i-2;k++){
a[l+1][k+1]=d[l][k]+a[0][1];
}
}
returna;
}
(doublea){
//||a>=10
if(a<0){
System.out.println("请输入大于0的数字");
returnfalse;
}else{
returntrue;
}
}
}

我电脑只有java的IDE,将就看吧,与C的逻辑是一样的 只是输入输出的命令有点区别,自己改一下咯

❺ 求注释以下C语言代码

这是一个背包问题,该算法已经是最简单的了,还有递归算法,我觉得更麻烦。对你的代码进行解释如下://背包问题:有m件物品和一个承重为t的背包。第i件物品的重量是w[i],价值是v[i]。//求解将哪些物品装入背包可使这些物品的重量总和不超过背包承重量t,且价值总和最大。#include #include #include int f[1010],w[1010],v[1010];//f记录不同承重量背包的总价值,w记录不同物品的重量,v记录不同物品的价值int max(int x,int y){//返回x,y的最大值 if(x>y) return x; return y;}int main(){ int t,m,i,j; memset(f,0,sizeof(f)); //总价值初始化为0 scanf("%d %d",&t,&m); //输入背包承重量t、物品的数目m for(i=1;i=w[i];j--){ f[j]=max(f[j-w[i]]+v[i],f[j]); //在放入第i个物品前后,检验不同j承重量背包的总价值,如果放入第i个物品后比放入前的价值提高了,则修改j承重量背包的价值,否则不变 } } printf("%d",f[t]); //输出承重量为t的背包的总价值 printf("\n"); getch(); return 0;}

❻ 关于“上下文无关文法”的问题

B吧,是编译原理题,给你参考吧,我有点忘了.推出的语言是终结符的串

比如:S -> aSb | ε ,

它产生的语言就是a^nb^n,(n ≥ 0),这里的终结符是,a,b ,非终结符S是不能作为最后语言的,它必须推出空字的时候结束.

这题强调的是生成了什么语言,产生式里包含了非终结符,非终结符只是产生终结符的一个推导过程,不能作为最后的形式,最后的形式也就是语言,是终结符组成的串.

❼ 编译原理:构造产生此语言的上下文无关文法G

对于文法G=(V, T, S, P),如果产生式的形式如下:
A -> xB
A -> x
其中A, B属于V,x属于T*,则称为右线性文法;相似的,如果产生式的形式如下:
A -> Bx
A -> x
则称为左线性文法。右线性文法和左线性文法统称为正则文法。
正则表达式的表达能力等价于正则文法,正则表达式的定义如下:
字母表中的任意字母是正则表达式,空串和空集也是正则表达式;
如果r, s是正则表达式,那么r|s, rs, r*, (r)也是正则表达式。
正则表达式的扩展:
r+:一个或多个重复
. :任意字符
[a-z]:字符范围
[^abc]:不在给定集合中的任意字符
r?:可选
正则表达式只能使用终结符(字母表中的字符),因而很容易变得复杂又难懂,实际中,经常使用正则描述,正则描述允许使用非终结符定义表达式,很像EBNF,但是它限制在未完全定义之前,不能使用非终结符,也就是说不允许递归或自嵌套。
像正则表达式的表达能力等价于正则文法一样,BNF范式的表达能力等价于上下文无关文法。BNF是“Backus Naur Form”的缩写。John Backus和Peter Naur首次引入一种形式化符号来描述给定语言的语法。
BNF的元符号:
::= 表示“定义为 ”,有的书上用-->
| 表示“或者”
< > 尖括号用于括起非终结符。
BNF的扩展EBNF:
可选项被括在元符号“[”和“]”中
重复项(零个或者多个)被括在元符号“{”和“}”中
仅一个字符的终结符用引号(")引起来,以和元符号区别开来
上述操作符不是严格限定的,有的人喜欢直接使用扩展正则表达式的操作符描述EBNF。除了方便表达以外,引入EBNF的另一个主要原因是为了更紧密地把文法映射到递归下降分析程序的真实代码。当需要手动构造归下降分析程序的时候,通常把上下文无关文法改写为EBNF是必需的。
如果一个上下文无关文法G不是自嵌套或自递归的,即不存在如下推导:
U =>* xUy
那么L(G)是正则语言。自嵌套的上下文无关文法不一定是正则语言。事实上,一个上下文无关文法是严格的,既不可能由正则文法产生,当且仅当该语言的一切文法都是自嵌套的。
如果一个上下文无关文法G不是自嵌套或自递归的,即不存在如下推导:
U =>* xUy
那么L(G)是正则语言。自嵌套的上下文无关文法不一定是正则语言。事实上,一个上下文无关文法是严格的,既不可能由正则文法产生,当且仅当该语言的一切文法都是自嵌套的。
BNF的扩展EBNF:
可选项被括在元符号“[”和“]”中
重复项(零个或者多个)被括在元符号“{”和“}”中
仅一个字符的终结符用引号(")引起来,以和元符号区别开来
上述操作符不是严格限定的,有的人喜欢直接使用扩展正则表达式的操作符描述EBNF。除了方便表达以外,引入EBNF的另一个主要原因是为了更紧密地把文法映射到递归下降分析程序的真实代码。当需要手动构造归下降分析程序的时候,通常把上下文无关文法改写为EBNF是必需的。
如果一个上下文无关文法G不是自嵌套或自递归的,即不存在如下推导:
U =>* xUy
那么L(G)是正则语言。自嵌套的上下文无关文法不一定是正则语言。事实上,一个上下文无关文法是严格的,既不可能由正则文法产生,当且仅当该语言的一切文法都是自嵌套的。
如上所述,上下文无关文法的递归性,对其分析方法也有很大影响。首先,用作识别这些结构的算法必须使用递归调用或显式管理的分析栈。其次,用作表示语言语义结构的数据结构现在也必须是递归的(通常是一颗分析树),而不再是线性的(如同用于词法和记号中的一样)了。
在程序设计语言中,通常用正则表达式描述词法规则。但是正则表示式的表达能力有限,她无法表达括号配对等语法形式,因而,需要引入表达能力更强的上下文无关文法。编译程序中常用正则文法表示词法,用上下文无关文法表示语法。那么程序语言中那些属于词法哪些属于语法呢?一个简单的办法,把所有能用正则文法表示的规则成为词法,即我们用尽可能的使用正则文法表示更多的东西,那些无法用正则表示式表示的成为句法,如C语言中的{ statement; }语法形式。语言中有些规则使用上下文无关文法仍然无法描述,例如变量的定义在使用之前,类型匹配等等,这些通常称为(静态)语义,它们在编译程序的静态语义检查阶段进行检测。
如果一个上下文无关文法G不是自嵌套或自递归的,即不存在如下推导:
U =>* xUy
那么L(G)是正则语言。自嵌套的上下文无关文法不一定是正则语言。事实上,一个上下文无关文法是严格的,既不可能由正则文法产生,当且仅当该语言的一切文法都是自嵌套的。

❽ 求大神给小弟解析一下C语言代码,新手求救!代码如下

#include<stdio.h>
voidmain(){
inti;//定义变量i
intf[20]={1,1};//定义一个20个整数的数组,初始化前2个数字为1
for(i=2;i<20;i++)//从数组第3个元素开始循环到第20个
f[i]=f[i-2]+f[i-1];//每个元素的值为它前面两个数字之和
for(i=0;i<20;i++){//从第一个树开始遍历数组
if(i%5==0)//如果是5的倍数就换行,相当于每5个数字在一行
printf(" ");//这就是换行
printf("%12d",f[i]);//以12个字符的长度输出每个数字,不足12字符在前面(还是后面记不清了,反正一个是"%12d"一个是"%-12d")补空格
}
printf(" ");
}

❾ 语言{a^nb^mc^nd^m|n,m>=0}是上下无关的文法

(m=a==b)|(n=c==d) (m=(0==0)|(n=(c==d)) 所以 (m=1)|(n=1); 因为|是或运算,所以两个赋值语句均执行,即m,n的值均为1。 如果中间的|是两条的话(即||),那么是 (m=1)||(n=1) 根据短路求值,当m=1执行完后,整个表达式的值已经可以确定为1,所以 n=1不执行,即m的值为1,n的值为0

❿ 如何定义上下文无关文法

程序设计语言的语法基本上都是上下文无关文法,应用十分广泛。

在计算机科学中,若一个形式文法G = (N, Σ, P, S) 的产生式规则都取如下的形式:V -> w,则称之为上下文无关的,其中 V∈N ,w∈(N∪Σ)* 。

上下文无关文法取名为“上下文无关”的原因就是因为字符 V 总可以被字串 w 自由替换,而无需考虑字符 V 出现的上下文。一个形式语言是上下文无关的,如果它是由上下文无关文法生成的﹙条目上下文无关语言﹚。

例子 1

一个简单的上下文无关文法的例子是:S -> aSb | ε上下文无关文法。这个文法产生了语言 {anbn : n ≥ 0} 。不难证明这个语言不是正规的。

例子 2

这个例子可以产生变量 x,y,z 的算术表达式:

S -> T + S | T - S | T

T -> T * T | T / T | ( S ) | x | y | z

例如字串 "( x + y ) * x - z * y / ( x + x )" 就可以用这个文法来产生。

例子 3

字母表 {a,b} 上 a 和 b 数目不相等的所有字串可以由下上下文无关文法述文法产生:

S -> U | V

U -> TaU | TaT

V -> TbV | TbT

T -> aTbT | bTaT | ε

这里 T 可以产生 a 和 b 数目相等的所有字串,U 可以产生 a 的数目多于 b 的数目的所有字串, V 可以产生 a 的数目少于 b 的数目的所有字串。