篇一:构造一个小语言的文法
? 构造一个小语言的文法 类pascal语言的文法
<程序>::=<语句>.
<语句>::=<赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|<空>
<赋值语句>::=<标识符>:=<表达式>
<条件语句>::=IF<条件>THEN<语句>
<当型循环语句>::=WHILE<条件>DO<语句>
<过程调用语句>::=CALL<标识符> <读语句>::=READ’(‘<标识符>’)’
<写语句>::=WRITE’(‘<标识符>’)’
<复合语句>::=BEGIN<语句>{;语句}END
<条件>::=<表达式><关系运算符><表达式>|ODD<表达式>
<表达式>::=<表达式>+<项>|<表达式>-<项>|<项> <项>::=<项>*<因子>|<项>/<因子>|<因子>
<因子>::=<标识符>|<无符号整数>|’(‘<表达式>’)’
<标识符>::=<字母>{<字母>}
<无符号整数>::=<数字>{<数字>}
<关系运算符>::==|#|<|<=|>|>=
<字母>::=a|b|c|d|…|x|y|z
<数字>::=0|1|2|3|4|5|6|7|8|9
? 对应的单词分类情况
关键字(keyword):BEGIN、END、WHILE、DO、READ、WRITE、IF、THEN、CALL、ODD 标识符(identification):除关键字外的用来表示各种名字且由小写字母组成的,如name、count 常数(constant):无符号整数
算数运算符(arithmeticsign):+、-、*、/、:=
关系运算符(relationsign):=、>、<、>=、<=、#
分隔符(breaksign):, ; ( )
第一次修改时间:2013-3-13 14:11
? 源程序清单
复制代码
#include<stdio.h>#include<string.h>
#include<Windows.h>
char prog[100],word[10];
char ch;
int sign,sum,i,j,p;
char *keyword[10]={"begin","end","while","do","read","write","if","then","call","odd"};
char
*output_menu1[]={"begin","end","while","do","read","write","if","then","call","odd","+","-","*","/",";=","=",">","<",">=","<=","#",",",";","(",")","ident","const","."};void alpha(){
//keyword&&identification
for(i=0;i<10;i++)
word[i]=NULL;
j=0;
ch=prog[p++];
while(ch==' '||ch==10)ch=prog[p++];
if((ch<='z'&&ch>='a'))
{
while((ch<='z'&&ch>='a'))
{
word[j++]=ch;
ch=prog[p++];
}
word[j++]='\0';
ch=prog[--p];
sign=26;
for(i=0;i<10;i++)
{
if(strcmp(word,keyword[i])==0)
{
sign=i+1;break;
}
}
}
//constant
else
{
if(ch<='9'&&ch>='0')
{
sum=0;
while(ch<='9'&&ch>='0')
{
sum=sum*10+ch-'0';
ch=prog[p++];
}
ch=prog[--p];
sign=27;
}
//sign
else
{
switch(ch)
{
case':':j=0;
word[j++]=ch;
ch=prog[p++];
if(ch=='=')
{
sign=15;
word[j++]=ch; }
else
{
sign=16;
ch=prog[--p]; }
break;
case'>':
word[j++]=ch;
ch=prog[p++];
if(ch=='=')
{
sign=19;
word[j++]=ch; }
else
{
sign=17;
ch=prog[--p]; }
break;
case'<':
word[j++]=ch;
ch=prog[p++];
if(ch=='=')
{
sign=20;
word[j++]=ch;}
else
{
sign=18;
ch=prog[--p];
}
break;
case'+':sign=11;word[0]=ch;break;case'-':sign=12;word[0]=ch;break;case'*':sign=13;word[0]=ch;break;case'/':sign=14;word[0]=ch;break;case'#':sign=21;word[0]=ch;break;case',':sign=22;word[0]=ch;break;case';':sign=23;word[0]=ch;break;case'(':sign=24;word[0]=ch;break;case')':sign=25;word[0]=ch;break;case'.':sign=28;word[0]=ch;break;default:sign=-1;
}
}
}
}
int main()
{
for(intj=0;j<28;j++)
{
printf("%5s%5d\n",output_menu1[j],j+1); }
p=0;
printf("input yourprogram:\n");
do
{
ch=getchar();
prog[p++]=ch;
}while(ch!='.');
p=0;
printf("your form:\n");
do
{
alpha();
switch(sign)
{
case -1:printf("!!!\n");break;
case27:printf("(%3d,%5d)\n",sign,sum);break; default:printf("(%3d,%5s)\n",sign,word); }
}while(sign!=28);
system("pause");
return 0;
}
篇二:小语言
2,能冲刷一切的除了眼泪,就是时间,以时间来推移感情,时间越长,冲突越淡,仿佛不断稀释的茶。
3,怨言是上天得至人类最大的供物,也是人类祷告中最真诚的部分。
4,智慧的代价是矛盾。这是人生对人生观开的玩笑。
5,世上的姑娘总以为自己是骄傲的公主(除了少数极丑和少数极聪明的姑娘例外)
6,如果敌人让你生气,那说明你还没有胜他的把握。
7,如果朋友让你生气,那说明你仍然在意他的友情。
8,令狐冲说“有些事情本身我们无法控制,只好控制自己。”
9,我不知道我现在做的哪些是对的,那些是错的,而当我终于老死的时候我才知道这些。所以我现在所能做的就是尽力做好每一件事,然后等待着老死。
10,也许有些人很可恶,有些人很卑鄙。而当我设身为他想象的时候,我才知道:他比我还可怜。所以请原谅所有你见过的人,好人或者坏人。
11,鱼对水说你看不到我的眼泪,因为我在水里。水说我能感觉到你的眼泪,因为你在我心里。 12,快乐要有悲伤作陪,雨过应该就有天晴。如果雨后还是雨,如果忧伤之后还是忧伤。请让我们从容面对这离别之后的离别。微笑地去寻找一个不可能出现的你!
13,死亡教会人一切,如同考试之后公布的结果――虽然恍然大悟,但为时晚矣~!
14,你出生的时候,你哭着,周围的人笑着;你逝去的时候,你笑着,而周围的人在哭!一切都是轮回!!!! 我们都在轮回中!!!
大家好!!!!
篇三:小语言
1.忙不完的是工作,流不的是时间,放不下的是牵挂,萦绕在心的是关怀!不期而至的祝福:
愿朋友开心每一天。
2.问候是滋润友情的甘露,安慰是惺惺相惜的源泉,鼓励是关心心灵的美酒,宽容是心连心化成的彩虹。让温馨的问候萦绕你,让最美的祝福陪伴你!
3.送一份美丽让你周末心情好,送一份关怀让你很骄傲,送一份青春让你永不老,送一份清风伴你睡午觉,送一份友情不需你回报,送一份平安陪你直到老!
4.雨不能乱下,风不能乱挂,树不能乱砍,钱不能乱花,话不能乱讲,情不能乱给,
彩信不能乱发,夏天祝福我不给他也不给她,只送给你了呵呵。
5.其实人和其它动物是多么相像,如果没有觉醒的心,提升自己的智慧,人只是动物呀!人在睡觉时,没有觉醒的心,和一条睡觉的狗没有什么两样!人在吃饭时没有觉醒的心,和一只吃饭的老鼠没有什么两样。人在生命中张皇奔走,只顾衣食欲望而没有觉醒之心,和蟑螂蚊子又有什么两样。 每当我自我松懈时我都会提醒自己:要随时随地有警觉的心。
6.修生----让美德更传扬;律己-----让人格更高贵;文明----让社会更和谐;短信----让心灵更温暖;礼仪-----让世界认识中国。
7.不管是否忙碌,有牵挂就好;不管是否
联系,能想起就好;想念是相互的,不管身在何处,照顾好自己是最大的成功!愿你的心情时时快乐。
8.许多人都关心你飞的高不高,只有少数人关心你飞的累不累。再忙也要注意放松休息,再累也要照顾好自己,尽管不常联系。,但一直牵挂。要注意保重身体!
9.人生就像一杯没有加糖的咖啡,喝起来是苦涩的,回味起来却有久久不会退去的余香。