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

作者&投稿:赫婕 (若有异议请与网页底部的电邮联系)
如何定义上下文无关文法?~

  程序设计语言的语法基本上都是上下文无关文法,应用十分广泛。
  在计算机科学中,若一个形式文法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 的数目的所有字串。

不严格地说:文法就是语法啦,用来说明语言的。上下文无关文法是文法规则的左部只能是一个文法符号的文法。

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.

未高精:
program gamesc;
var
f:array[0..100,0..100] of longint;
a,c:array[0..100] of longint;
m,n,i,j,k,total:longint;

function max(a,b:longint):longint;
begin
if a>b then max:=a else max:=b;
end;

begin
readln(n,m);
fillchar(c,sizeof(c),0);
c[0]:=1;
for i:=1 to m do c[i]:=c[i-1]*2;
total:=0;
for i:=1 to n do
begin
for j:=1 to m do read(a[j]);
readln;
fillchar(f,sizeof(f),0);
for j:=1 to m do f[j,j]:=a[j]*c[m];
for j:=1 to m-1 do
for k:=1 to m-j do
f[k,k+j]:=max(f[k+1,k+j]+a[k]*c[m-j],f[k,k+j-1]+a[k+j]*c[m-j]);
total:=total+f[1,m];
end;
writeln(total);
end.

高精(在未高精的基础上修改的):
program gamesc;
type
asd=array[0..100] of longint;

var
f:array[0..100,0..100] of asd;
c:array[0..100] of asd;
a:array[0..100] of longint;
m,n,i,j,k:longint;
total:asd;

function max(a,b:asd):asd;
var
q1,q2,i:longint;
begin
q1:=a[0];q2:=b[0];
if q1>q2 then exit(a)
else if q2>q1 then exit(b)
else
for i:=q1 downto 1 do
begin
if a[i]>b[i] then exit(a)
else if a[i]<b[i] then exit(b);
end;
exit(a);
end;

function cheng(s1:longint;s2:asd):asd;
var
i,j:longint;
begin
for i:=1 to s2[0] do
s2[i]:=s2[i]*s1;
for i:=1 to s2[0]+3 do
begin
s2[i+3]:=s2[i+3]+s2[i] div 1000;
s2[i+2]:=s2[i+2]+(s2[i] mod 1000) div 100;
s2[i+1]:=s2[i+1]+(s2[i] mod 100) div 10;
s2[i]:=s2[i] mod 10;
end;
j:=i+6;
while s2[j]=0 do j:=j-1;
s2[0]:=j;
cheng:=s2;
end;

function jia(s1,s2:asd):asd;
var
q1,q2,q,i:longint;
begin
q1:=s1[0];q2:=s2[0];
if q1>q2 then q:=q1 else q:=q2;
for i:=1 to q do
begin
s1[i]:=s1[i]+s2[i];
if s1[i]>9 then
begin
s1[i]:=s1[i]-10;
s1[i+1]:=s1[i+1]+1;
end;
end;
s1[0]:=q;
if s1[q+1]<>0 then s1[0]:=q+1;
jia:=s1;
end;

begin
assign(input,'game.in');
reset(input);
readln(n,m);
fillchar(c,sizeof(c),0);
c[0,0]:=1;c[0,1]:=1;
for i:=1 to m do
begin
for j:=1 to c[i-1,0] do
c[i,j]:=c[i-1,j]*2;
for j:=1 to c[i-1,0] do
if c[i,j]>9 then begin
c[i,j]:=c[i,j]-10;
c[i,j+1]:=c[i,j+1]+1;
end;
c[i,0]:=c[i-1,0];
if c[i,c[i-1,0]+1]<>0 then c[i,0]:=c[i,0]+1;
end;
fillchar(total,sizeof(total),0);
total[0]:=1;
for i:=1 to n do
begin
for j:=1 to m do read(a[j]);
readln;
fillchar(f,sizeof(f),0);
for j:=1 to m do f[j,j]:=cheng(a[j],c[m]);
for j:=1 to m-1 do
for k:=1 to m-j do
f[k,k+j]:=max(jia(f[k+1,k+j],cheng(a[k],c[m-j])),jia(f[k,k+j-1],cheng(a[k+j],c[m-j])));
total:=jia(total,f[1,m]);
end;
close(input);
assign(output,'game.out');
rewrite(output);
for i:=total[0] downto 1 do
write(total[i]);
writeln;
close(output);
end.


pascal是什么意思?
Pascal是一种深受计算机编程者喜爱的高级程序设计语言,由瑞士Niklaus Wirth教授在20世纪60年代末期设计。以数学家Blaise Pascal命名,Pascal语言因其严格的结构化、丰富的数据类型、高效运行和强大的查错能力,使其成为基于DOS编程的热门选择。对于初学者来说,Pascal尤其有助于培养良好的编程习惯和清晰的逻辑...

计算机语言是如何产生的?
1969年,提出了结构化程序设计方法,1970年,第一个结构化程序设计语言一Pascal语言出现,标志着结构化程序设计时期的开始。80年代初开始,在软件设计思想上,又产生了一次革命,其成果就是面向对象的程序设计。在此之前的高级语言,几乎都是面向过程的,程序的执行是流水线似的,在一个模块被执行完成前,...

pascal语言
最后再告诉你一个关于pascal的小窍门:打开pascal时,若是一个小框,不是全屏,就Alt+回车(平时也能从全屏变成小框,能在全屏与小框之间自由转化)新手,慢慢学,偶看好你欧!!!下载偶就不必多说了吧。这是TP的打开:TP->TPX 这是FP的打开:pp->bin->go32v2->fp(或fp.exe)会出现一个框...

pascal早还是c语言早
ANSI C比原来的标准C有了很大的发展。K&R在1988年修改了他们的经典著作《The C Progra- mming Language》 ,按照ANSI C的标准重新写了该书。1987年,ANSI C又公布了新标准--87 ANSI C 。目前流行的C编译系统都是以它为基础的。Pascal的历史 沃斯的pascal Pascal 语言最初由瑞士苏黎士理工学院的...

关于pascal语言
Pascal语言概述与预备知识 关于 Pascal 1、关于Turbo Pascal Pascal是一种计算机通用的高级程序设计语言。它由瑞士Niklaus Wirth教授于六十年代末设计并创立。以法国数学家命名的Pascal语言现已成为使用最广泛的基于DOS的语言之一,其主要特点有:严格的结构化形式;丰富完备的数据类型;运行效率高;查错能力强...

pascal程序
一、Pascal 语言概述 PASCAL语言也是一种算法语言,它是瑞士苏黎世联邦工业大学的N.沃思(Niklaus Wirth)教授于1968年设计完成的,1971年正式发表。1975年,对PASCAL语言进行了修改,作为"标准PASCAL语言"。PASCAL语言是在ALGOL 60的基础上发展而成的。它是一种结构化的程序设计语言,可以用来编写应用程序。

写出pascal语言中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 ...

pascal语言
program sd;var x:string;a:array[1..26]of integer;i:integer;begin read(x);while x<>'*' do begin a[ord(x)-64]:=a[ord(x)-64]+1;read(x);end;for i:=1 to 26 do writeln(chr(i+64),': ',a[i]);end.这个程序是读单个字母,到*为止。要读一个字符串,就不用以*...

用Pascal语言写出:有一个正整数的各个数字之和的11倍恰好等于它本身_百 ...
var a,s:longint;procedure fenjie(b:longint);begin repeat s:=s+b mod 10;b:=b div 10;until b=0;end;begin a:=0;repeat a:=a+1;s:=0;fenjie(a);s:=s*11;until a=s;writeln(s);readln;end.参考资料:节省运算时间与电脑内存,省时省力特方便 ...

pascal语言有几种版本?
Delphi几乎可以说是完美的,只是Pascal语言的过于严谨让人感觉有点烦。 综述: 方案二比较适合那些具有一定编程基础并且学过Pascal语言的朋友。 Pascal语言简介 Delphi简介 === 方案三 C语言 & Visual C++ 优点(1)C语言灵活性好,效率高,可以接触到软件开发比较底层的东西。 (2)微软的MFC库博大精深,学会它可以让随...

桐梓县18525132756: 写出pascal语言中if语句的上下文无关文法的完整定义 -
旗欧马来: if (条件) then (语句1) [else (语句2)];就是计算条件表达式,如果为真(True),那么执行语句1,方括号[]内的语句可以不要,如果存在else语句,那么执行语句2举个例子:va...

桐梓县18525132756: 输入三个数,输出中间大小的一个数(Pascal语言 If语句) -
旗欧马来: var a,b,c,max:longint; begin readln(a,b,c); if a>max then max:=a; if b>max then max:=b; if c>max then max:=c; writeln(max); end.

桐梓县18525132756: Pascal if语句? -
旗欧马来: 你的语句:if(m>0) then w[i]:=b[m-1] else w[i]:=b[0];a[m-1] := a[m-1]-1;实际上是下面的两个语句:if(m>0) then w[i]:=b[m-1] else w[i]:=b[0];a[m-1] := a[m-1]-1;第一个语句是IF语句,根据m的值选择执行一个操作:给w[i]赋不同的值.第二个语句是赋值语句,无论第一个语句的条件和结果如果都要执行.如果需要在if语句的then或者else里面执行多条语句,应该使用begin ..... end这样的语法,否则then和else都只执行语句.此外,你的语句里面的分号、冒号好像是中文的,电脑只允许使用英文.

桐梓县18525132756: pascal 语言if语句 在线等 20 只要看看我哪里错了 输出不了 -
旗欧马来: 改成:var a,b,c:longint; begin read(a,b,c); if (a<b) then a:=b; if (a<c) then a:=c; if (b<c) then c:=b; writeln(a,' ',b,' ',c); end.

桐梓县18525132756: pascal三项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('a1');//否则输出a1 end.

桐梓县18525132756: pascal语言中的if语句在then之后有多个变量要怎样写 -
旗欧马来: pascal的if有2种基本格式1、如果是单行的指令句:if 条件 then 一行语句;2、如果是多行的指令句 if 条件 then begin语句1; 语句2; ... 语句n; end;

桐梓县18525132756: pascal if 语句
旗欧马来: var x,y:longint; beginreadln(x);if x>0 then y:=x*x-x+1else y:=x*x+1;writeln(y); end.

桐梓县18525132756: PascalScript中的if怎么用
旗欧马来: if 条件 Then 代码(条件为真执行) Else 代码(条件为假执行)

桐梓县18525132756: 我要编写一个Pascal程序,if语句:和电脑猜拳.那位大侠帮我一下?跪求 - ----------- -
旗欧马来: 用随机吧 program ddd; var computer,player; begin randomize; repeat computer:=trunc(random(3)+0.5); read(player); until playercomputer; if (computer-player) mod 3=1 then writeln('Computer win') else writeln('Player win'); end.1->拳头,2->布,3->剪刀

桐梓县18525132756: Pascal谁能教一下if语句,谢谢. -
旗欧马来: if 条件 then 要做的事 望采纳

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网