博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
词法分析程序
阅读量:4324 次
发布时间:2019-06-06

本文共 3129 字,大约阅读时间需要 10 分钟。

这个词法分析程序只是一个相对简单的程序,如果还有其他符号要标注的话可以再加,主要功能就是让用户输入一串字符串,直到用户输入$(个人定义的结束符)就结束输入开始执行词法分析功能,将输入的字符存在一个字符数组里, 然后按一个个的字符读出,对其进行判断,最终将这个用户输入的字符串分解为不同种别码的类型。 #include
#include
#include
#define Max 1000int j=1;long g=0;char nchar[Max]={
""}; int k=0;char ch=NULL;char m[30]={
""};int sym=-1;main(){ char cha; int p; printf("请输入一串字符串:"); while((cha=getchar())!='$') { nchar[g]=cha; g++; } do { p=getsym(); }while(p); }int getsym(){ int i; char a[2]={
""}; char word[][15]={
"begin","do","end","if","then","while"}; int wsym[6]={
1,2,3,4,5,6}; int ssym[9]={
25,26,27,28,0,13,14,15,16}; char b[9]={
'=',';','(',')','#','+','-','*','/'}; if(j==1&&k
='a'&&ch<='z') { while((ch>='a'&&ch<='z')||(ch>='0'&&ch<='9')||ch=='_') { a[0]=ch; strcat(m,a); if(k==g) { break; } ch=nchar[k]; k++; } for(i=0;i<12;i++) { if(strcmp(m,&word[i][0])==0) break; } if(i<12) { sym=wsym[i]; printf("保留字%s 种别码%d\n",m,wsym[i]); } else { sym=10; printf("标识符%s 种别码10\n",m); } if(k==g) return 0; strcpy(m,""); return 1; } else if(ch>='0'&&ch<='9') { while(ch>='0'&&ch<='9') { a[0]=ch; strcat(m,a); if(k==g) { break; } ch=nchar[k]; k++; } sym=11; printf("常数%s 种别码11\n",m); if(k==g) return 0; strcpy(m,""); return 1; } else if(ch==':') { a[0]=ch; strcat(m,a); if(k==g) { sym=17; printf("运算符%s 种别码17\n",m); return 0; } ch=nchar[k]; k++; if(ch=='=') { a[0]=ch; strcat(m,a); sym=18; printf("运算符%s 种别码18\n",m); if(k==g) { return 0; } ch=nchar[k]; k++; } strcpy(m,""); return 1; } else if(ch=='<') { a[0]=ch; strcat(m,a); if(k
') { a[0]=ch; strcat(m,a); sym=22; printf("运算符%s 种别码22\n",m); if(k==g) { return 0; } ch=nchar[k]; k++; } else { printf("运算符%s 种别码22\n",m); } if(k==g) { return 0; } strcpy(m,""); return 1; } else if(ch=='>') { a[0]=ch; strcat(m,a); if(k
•<字母>   A->a|b|c|d|……|z|A|B...|Z
 
•<数字>  B->0|1|2|….|9
 
•<整数常数>  S->C|SB
 

      C->1|2|3|…|9

 
•<标识符>  S->A|SB|SA|S_
 
•<关键字>  S->begin|if|then|while|do|end
 
•<运算符>  S->+|-|*|/|=|#|<|<=|>|>=|:=
 
•<界符>  S->(|),|;|.
 
 
 

 

转载于:https://www.cnblogs.com/OZX143570/p/5925039.html

你可能感兴趣的文章
卸载LabVIEW及其模块的方法
查看>>
[C/C++] C++中new的语法规则
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_1_函数式编程思想概述...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_12_创建多线程程序的第二种方式_实现Runnable接口...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_2_冗余的Runnable代码...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_13_Thread和Runnable的区别...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_14_匿名内部类方式实现线程的创建...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_1_线程安全问题的概述...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_2_线程安全问题的代码实现...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_3_编程思想转换&体验Lambda的更优写法...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第4节 等待唤醒机制_4_Object类中wait带参方法和notifyAll方法...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_4_Lambda标准格式...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_5_Lambda表达式的无参数无返回值的...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_6_Lambda表达式有参数有返回值的...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_2_File类的静态成员变量...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_7_Lambda表达式有参数有返回值的练习...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_3_绝对路径和相对路径...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第6节 Lambda表达式_8_Lambda省略格式&Lambda使用前...
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_1_File类的概述
查看>>
阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_4_File类的构造方法...
查看>>