编译原理 实验一 词法分析

编译原理 实验一 词法分析

一、实验目的

编制一个词法分析程序,加深对词法分析原理的理解

二、实验要求

1.待分析的简单的词法
(1)关键字:
begin if then while do end
注:所有的关键字都是小写。
(2)运算符和界符
. + - * / = <> < <= > >= ( ) ; :=
(3)其他单词是标识符(IDENT)和整型常数(NUMBER),通过以下正规式定义:
IDENT ::= letter (letter | digit)*
NUMBER ::= digit digit*
注:所有的IDENT和NUMBER的长度不超过20
(4)空格有空白、制表符和换行符组成。空格一般用来分隔IDENT、NUMBER、运算符、界符和关键字,词法分析阶段通常被忽略。整个程序串长度不超过80个字符。
2. 各种单词符号对应的类别值:
表 各种单词符号对应的类别码
单词符号 是否保留字 枚举值 类别码

单词符号 是否保留字 枚举值 类别码
. period 0
+ plus 1
- minus 2
* times 3
/ slash 4
= eql 5
<> neq 6
< lss 7
<= leq 8
> gtr 9
>= geq 10
( lparen 11
) rparen 12
; semicolon 13
:= becomes 14
begin Y beginsym 15
end Y endsym 16
if Y ifsym 17
then Y thensym 18
while Y whilesym 19
do Y dosym 20
IDENT ident 21
NUMBER number 22
3. 词法分析程序的功能: 输入:所给文法的源程序字符串,以“.”结束。 输出:二元组(sym, token或number)构成的序列。 其中:sym为单词种别 token为存放的单词自身字符串; number为整型常数。对于数值串需要转化为实际的值。

示例:
源程序: begin x:=9;if x<10 then x:=(x+10)*2 end.
经过词法分析后输出如下序列:(15,begin)(21,x)(14,:=)(22,9)(13,?……

4. 词法分析程序的设计
1)词法分析识原理采用状态转换图方法:

三、实验说明

1、程序中的关键变量,识别示例

2、Symbol: 自定义的enum枚类类型,定义了程序中所有单词符号及其对应类别码。
  1. 获得某个字符串(例:begin)的单词符号类型
    假设strToken= “begin”,则:
    一种方法是直接赋值:sym=symbol.beginsym;
    另一种方法是通过getType函数:symbol.getType(strToken.concat(“sym”));
  2. 获得某sym的类别码,则可以访问其成员变量sym.iIndex。

代码

package lex;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class lex {
   
	
	//单词符号类别定义,与实验的表格要求一致
	public enum symbol {
   
		period(".",0),	plus("+",1), 	minus("-",2), 	times("*",3), 		slash("/",4),	
		eql("=",5),		neq("<>",6),	lss("<",7),		leq("<=",8), 		gtr(">",9),	
		geq(">=",10),	lparen("(",11),	rparen(")",12),	semicolon(";",13),	becomes(":=",14),	
		beginsym("begin",15),	endsym("end",16),		ifsym("if",17),		thensym("then",18),		
		whilesym("while",19),	dosym("do",20),			ident("IDENT",21),	number("number",22),
		nil("nil",23),   kong(" ",24);
		
		private String strName; 
		private int iIndex;
		private symbol(String name, int index)
		{
   
			
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值