无符号数的识别.docVIP

  • 19
  • 0
  • 约8.95千字
  • 约 10页
  • 2018-01-04 发布于河南
  • 举报
无符号数的识别

无符号数的词法分析程序 一、实验目的和要求 (1)初步掌握编译原理的实验的技能; 二、实验内容和原理 内容:掌握词法分析的基本思想,并用高级语言编写无符号数(包括整数和实数)的词法分析程序。 要求:从键盘中输入一字符串(包括字母、数字等),编写程序识别出其中的无符号数。 无符号数的文法规则课定义如下: 无符号数 无符号实数|无符号整数 无符号实数 无符号整数.数字串[E比例因子] 比例因子 有符号整数 有符号整数 [+|-]无符号整数 无符号整数 数字串 数字串 数字{数字} 数字 0 1 2 3 4 5 6 7 8 9 本实验中我利用了状态转化图的思想,下面是试验中用到构造的状态转化图: 描述状态机的代码格式如下: int state = S0 ; while(1) { Switch(state) { case S0 : if(T0转移条件满足) {状态转移到满足T0的次态;操作;} if(T1转移条件满足) {状态转移到满足T1的次态;操作;} if(T2转移条件满足) {状态转移到满足T2的次态;操作;} … Break ; case S1 : //插入S1状态下的操作; break ; … } } 实验代码: //本程序主要实现实数的识别 import java.io.BufferedReader ; import java.io.IOException ; import java.io.InputStreamReader ; public class RealNumberIdentified { /*---------------------------------成员变量的定义---------------------------------------*/ private final int S_0 = 0 ; private final int S_1 = 1 ; private final int S_2 = 2 ; private final int S_3 = 3 ; private final int S_4 = 4 ; private final int S_5 = 5 ; private final int S_6 = 6 ; private final int S_7 = 7 ; private char originNumber[ ] ; //用来记录原始的数字串 private String resultNumber = new String( ) ; private int realnumberAmount = 0 ; //用来记录识别出的实数的个数 private int realnumberFlag = 0 ; //用于标识该实数是正数还是负数 private int eFlag = 0 ; //用来标识该实数是不是指数实数 private int pointFlag = 0 ; //用来标识该实数是否是小数 private int basePlusMinus = 1 ; //用来标识底数的符号 private int count = 0 ; //用来记录已经识别数字串的位数 private int currentState = S_0 ; //用来记录当前所处于的状态 /*---------------------------------------------------------------------------------- -----*/ /*-------------------------该方法用来初始化一些参数------------------------------------*/ private void init( ) { resultNumber = new String( ) ; basePlusM

文档评论(0)

1亿VIP精品文档

相关文档