学习使用的PL/0编译器增强版PL/0plusplusCompiler(五)使用<>代替#不等于号
2016-05-19 17:11
676 查看
思路就是在检测小于号时检测一下如果后边为大于号就把当前的token组合识别为不等于号。
/*词法分析,获取一个符号 */ int getsym() { int i,j,k; while( ch==' '||ch==10||ch==9) { getchdo; } if(ch>='a'&&ch<='z') { k=0; do{ if(k<al) { a[k]=ch; k++; } getchdo; }while(ch>='a'&&ch<='z'||ch>='0'&&ch<='9'); a[k]=0; strcpy(id,a); i=0; j=norw-1; do{ k=(i+j)/2; if(strcmp(id,word[k])<=0) { j=k-1; } if(strcmp(id,word[k])>=0) { i=k+1; } }while(i<=j); if(i-1>j) { sym=wsym[k]; } else { sym=ident; } } else { if(ch>='0'&&ch<='9') { k=0; num=0; sym=number; do{ num=10*num+ch-'0'; k++; getchdo; }while(ch>='0'&&ch<='9'); /*获取数字的值*/ k--; if(k>nmax) { error(30); } } else { if(ch==':') /*检测赋值符号*/ { getchdo; if(ch=='=') { sym=becomes; getchdo; } else { sym=nul; /*不能识别的符号*/ } } else { if(ch=='<') /*检测小于或小于等于符号*/ { getchdo; if(ch=='=') { sym=leq; getchdo; } else { if(ch=='>'){ /*检测不等于号*/ sym=neq; getchdo; }else{ sym=lss; } } } else { if(ch=='>') /*检测大于或大于等于符号*/ { getchdo; if(ch=='=') { sym=geq; getchdo; } else { sym=gtr; } } else { sym=ssym[ch];/* 当符号不满足上述条件时,全部按照单字符号处理*/ //getchdo; //richard if(sym!=period) { getchdo; } //end richard } } } } } return 0; }
相关文章推荐
- 实现一个简单的计算器
- NOP(N) NOP_##N
- 编译器是如何工作的?(转)
- 写给想学java的朋友!
- 学java的必看!
- java中的加密!
- java中的使用类!
- LEX/FLEX词法分析器
- 如何模仿人的学习模式来教计算机程序解数学题?
- 上下文无关文法1
- 上下文无关文法2
- 编译原理——词法分析器
- 编译原理预习笔记------名词理解
- Simple scanner of c
- 编译原理:短语、直接短语、句柄、素短语
- 编译原理中FIRST集合与FOLLOW集合的算法
- 上下文无关文法解析
- 识别浮点常量问题-编译原理程序实现
- 计算的哲学(philosophy in coding)
- 编译原理 Chapter1 Introduction 第一章 简介