求词法分析器java语言实现的代码,求解

谁有的话,可以发下吗,这个真不会写,谢谢... 谁有的话,可以发下吗,这个真不会写,谢谢 展开
 我来答
碧血玉叶花
推荐于2016-04-04 · TA获得超过4976个赞
知道大有可为答主
回答量:6154
采纳率:0%
帮助的人:1703万
展开全部
/*
 * 词法分析
 * 
 */
import java.io.File;
import java.io.FileReader;

public class Compiler {
private static String string;
private static String str;
private static char ch;
/*
 * 读取文件
 */
public static void getChar() throws Exception{
File f= new File("C:\\","test.txt");
if(!f.exists()){
System.out.println("文件不存在,请输入正确的文件路径");
}
FileReader fr = new FileReader(f);
int rs = 0;
char []data = new char[256];
System.out.print("");

while((rs = fr.read(data)) > 0){
string = new String(data,0,rs).trim();
}
}
/*
 *  判断读入的字符是否为字母
 */
public static boolean isLetter(char c){
if((ch >= 'a' && ch <= 'z') || (ch >+ 'A' && ch <= 'Z')){
return true;
}
else
return false;
}
/*
 * 判断读入的字符是否为数字
 */
public static boolean isDigit(char c){
if(ch >='0' && ch <= '9'){
return true;
}
else
return false;
}
/*
 * 判断是否为关键字
 */
public static boolean isKey(String string) {
if(string.equals("void") || string.equals("if")|| string .equals("for")|| string.equals("while") 
|| string.equals("do")|| string.equals("return")|| string.equals("break")
|| string.equals("main"))
{
return true;
}
else return false;
}
/*
 * 判断输入的字符并输出单词符号
 */
public static void judgement() throws Exception {
Compiler.getChar();
int m = 0;
string +=' ';
for(int i = 0;i < string.length();i++){
switch (m)
{
case 0:
ch = string.charAt(i);
if(ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '='
|| ch == '>' || ch == '<')
{
m = 4;
}
else if(ch == ',' || ch == ';' || ch == '{' || ch == '}' || ch == '(' || ch == ')')
{
m = 5;

else if ( isDigit((ch =string.charAt(i)) ) )
{
str = "";
str += ch;
m = 3;

else if ( isLetter(ch =string.charAt(i)) )
{
str = "";
str += ch;
m = 2;
}else {}
break;

case 4:
i--;
System.out.println(("( 4 " + "“ " + ch + " ” )"));
m = 0;
break;

case 5:
i --;
System.out.println(("( 5 " + "“ " + ch + " ” )"));
m = 0;
break;

case 2:
if (isLetter(ch = string.charAt(i)))
{
str += ch;
}
else
{
if ( isKey(str) )
{
System.out.println("( 1 " + "“ " + str + " ” )");
}else {
System.out.println(("( 2 " + "“ " + str + " ” )"));
}
i--;
m = 0;
}
break;

case 3:
if (isDigit((ch =string.charAt(i)) ) )
{
str += ch;
}
else 
{
System.out.println(("( 3 " + "“ " + str + " ” )"));
i --;
m = 0;
}
break;
}
}
}

public static void main(String[] args) throws Exception{
Compiler.judgement();
// System.out.print(b)  

}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式