• 大小: 75KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-07-18
  • 语言: Java
  • 标签: 语义分析  

资源简介

通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法。 采用递归下降语法制导翻译法,对算术表达式、赋值语句进行语义分析并生成四元式序列。

资源截图

代码片段和文件信息

package com;

public class Analyzer {

private String input =““;//输入缓冲
private String token =““;//单词缓冲

private int p_input = 0;//输入缓冲指针
//private int p_token = 0;//单词缓冲指针

private char ch = ‘ ‘;
private String[] keyWords = {“begin““if““then““while““do““end““int““String““boolean““class“};

public Analyzer(){
p_input = 0;
}

//外部接口
public void setInput(String input) {
this.input = input;
p_input = 0;//每一行数据进来,这个下标要置0
}

//从输入缓冲区读取一个字符到ch中
public char getCh(){
ch = input.charAt(p_input);
p_input++;
return ch;
}

//去掉空白字符
public char getNoBlankChar(){
while(ch ==‘ ‘ || ch == 10){
ch = input.charAt(p_input);
p_input++;
}
return ch;
}

//判断该字符是否是字母
private boolean isLetter(char ch){
if(ch >=‘a‘ && ch <= ‘z‘ || ch >=‘A‘ && ch <= ‘Z‘){
return true;
}else
return false;
}

//判断该字符是否是数字
private boolean isNumber(char ch){
if(ch >=‘0‘ && ch <= ‘9‘ ){
return true;
}else
return false;
}
//拼接单词
void concat(){
String ch_String  = String.valueOf(ch);//先转换成String类型才能拼接
//System.out.println(“ch_String : “ + ch_String );
//token.concat(ch_String);
token = token + ch_String;
//System.out.println(“token : “ + token );

}

//回退一个字符
void retrace(){
p_input --;
}

//检索关键字,返回关键字的种别码(即数组的下标)
int reverse(){
for(int i = 0 ; i < keyWords.length; i++){
if(keyWords[i].equals(token)){
return i+1;//返回关键字的下标
}
}
return 10;//不是关键字则返回10
}
  //判断该字符是否是空格字符
private boolean isBlankChar(char ch){
if(ch == ‘ ‘){
return true;
}else{
return false;
}
}

//判断该字符串是否都是数字
private boolean isNumberString(String token){
for(int i = 0 ; i < token.length() ; i++){
if(!isNumber(token.charAt(i))){//只要有一个字符不是数字,即返回false
return false;
}
}
return true;
}


//词法扫描
public WORD scanner(){
//System.out.println(“执行Scanner()“);
WORD myWord  = new WORD();
myWord.setTypeNum(10);
myWord.setWord(““);
//p_token = 0;
token =““;

getCh();//得到第一个字符
getNoBlankChar();//去掉空白字符串的情况确保得到的是有效字符

//如果第一个字符是字母的情况
if(isLetter(ch)){
//while(isLetter(ch) || isNumber(ch)){//如果当前字符是数字或者字母
while(isLetter(ch) || isNumber(ch)){//如果当前字符是数字或者字母
concat();//将当前字符和之前的字符拼接起来
getCh();//继续读取下一个字符
}
retrace();//回退一个字符(因为多读了一个字符)
myWord.setTypeNum(reverse());
myWord.setWord(token);
return myWord;
}
else if(isNumber(ch)){//第一个字符是数字
//while(isNumber(ch)){
while(isLetter(ch) || isNumber(ch)){//如果当前字符是数字或者字母
concat();
getCh();
}
retrace();//回退一个字符(因为多读了一个字符)
if(isNumberString(token)){//如果该单词都是数字字符
myWord.setTypeNum(11);//数字的种别码是11
}else{
myWord.setTypeNum(600);//错误单词的种别码是600
}
myWord.setWord(token);
return myWord;
}
else switch(ch){
   case ‘=‘: getCh();
              if(ch == ‘=‘){
              

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        299  2017-12-16 09:37  语义分析实验\SemanticAnalyze\.classpath

     文件        391  2017-12-16 09:32  语义分析实验\SemanticAnalyze\.project

     文件        598  2017-12-16 09:37  语义分析实验\SemanticAnalyze\.settings\org.eclipse.jdt.core.prefs

     文件       4115  2017-12-16 15:53  语义分析实验\SemanticAnalyze\bin\com\Analyzer.class

     文件       1410  2017-12-16 09:37  语义分析实验\SemanticAnalyze\bin\com\FileInput.class

     文件       3396  2017-12-16 16:40  语义分析实验\SemanticAnalyze\bin\com\LRparse.class

     文件       1398  2017-12-16 09:37  语义分析实验\SemanticAnalyze\bin\com\Main.class

     文件        703  2017-12-16 09:37  语义分析实验\SemanticAnalyze\bin\com\WORD.class

     文件         58  2017-12-16 16:29  语义分析实验\SemanticAnalyze\data\testData.txt

     文件       7188  2017-12-16 15:53  语义分析实验\SemanticAnalyze\src\com\Analyzer.java

     文件        856  2017-12-16 09:35  语义分析实验\SemanticAnalyze\src\com\FileInput.java

     文件       3353  2017-12-16 16:40  语义分析实验\SemanticAnalyze\src\com\LRparse.java

     文件       1125  2017-12-16 09:36  语义分析实验\SemanticAnalyze\src\com\Main.java

     文件        345  2017-12-16 09:36  语义分析实验\SemanticAnalyze\src\com\WORD.java

     文件      82818  2017-12-16 16:30  语义分析实验\语义分析实验.docx

     目录          0  2017-12-16 16:41  语义分析实验\SemanticAnalyze\bin\com

     目录          0  2017-12-16 16:41  语义分析实验\SemanticAnalyze\src\com

     目录          0  2017-12-16 16:41  语义分析实验\SemanticAnalyze\.settings

     目录          0  2017-12-16 16:41  语义分析实验\SemanticAnalyze\bin

     目录          0  2017-12-16 16:41  语义分析实验\SemanticAnalyze\data

     目录          0  2017-12-16 16:41  语义分析实验\SemanticAnalyze\src

     目录          0  2017-12-16 16:41  语义分析实验\SemanticAnalyze

     目录          0  2017-12-16 16:42  语义分析实验

----------- ---------  ---------- -----  ----

               108053                    23


评论

共有 条评论