C语言词法分析算法设计与实现 编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。
输入:一段C语言程序
输出:每个单词以及每个单词所在行号
比如:输入如下一段C程序
main()
{
int a,b;
}
输出为:
( main, ”line=1”);
( ( , ”line=1“);
( ) , ”line=1”);
({ , ”line=2” );
( int, “line=2”);
…………… 用Java语言,或者C语言,推荐用Java语言。完成所要有的C语言词法分析器。
要求:读文件,或者命令行的形式读取C源程序,输出源程序中每个单词以及每个单词所在行号。
要求:开发出图形化界面,读文件,把结果输出到界面上。
package test;
import java.io.*;
public class WordAnalysis {
private String Keyword[]={"if","int","for","while","do","return","break","continue","main","printf","scanf"};
public String filename;
StringBuffer buffer = new StringBuffer();
public WordAnalysis(String filename) {
this.filename=filename;
}
boolean isKeyword(String ch){
for(int i=0;i<Keyword.length;i++)
if(Keyword[i].equals(ch))
return true;
return false;
}
boolean isDigit(char ch){
if(ch>47&&ch<58)
return true;
else
return false;
}
boolean isLeter(char ch){
if((ch>64&&ch<91)||(ch>96&&ch<123))
return true;
else
return false;
}
public void readFile()throws FileNotFoundException{
try{
FileReader fr = new FileReader(this.filename);
BufferedReader br = new BufferedReader(fr);
String temp = null;
while((temp = br.readLine()) != null)
{
buffer.append(temp);
}
}
catch (Exception e) {
System.out.println("文件操作错误:" + e.toString());
}
}
public void Analysis(){
for(int n=1;n<50;n++)
{
int i=0;
char ch;
while(i<buffer.length()){
ch=buffer.charAt(i);
if(isLeter(ch))
{
StringBuffer temp=new StringBuffer() ;
temp.append(ch);
ch=buffer.charAt(++i);
while(isLeter(ch)||isDigit(ch))
{
temp.append(ch);
ch=buffer.charAt(++i);
}
if(isKeyword(temp.toString()))
System.out.println("( line="+n+",“ "+temp+" ”)");
else
System.out.println("( line="+n+",“ "+temp+" ”)");
}
else if((ch==';')||(ch==',')||(ch=='(')||(ch==')')||(ch=='{')||(ch=='}')||(ch=='"'))//判断是否为分隔符
{
System.out.println("( line="+n+",“ "+ch+" ”)");
i++;
}
else if(isDigit(ch))
{
StringBuffer temp=new StringBuffer();
while(isDigit(ch))
{
temp.append(ch);
ch=buffer.charAt(++i);
}
System.out.println("( line="+n+",“ "+temp+" ”)");
}
else
{