java词法分析程序_怎么用JAVA编写词法分析器程序

我也做过这个作业package source;import java.util.LinkedList;public class LexicalAnalysis {//私有变量声明 private LinkedList optr = new LinkedList(); private String exp; //词法分析 public LinkedList lexical_analysis(String exp) {char ch = '\0'; //当前文件指针内容int index = 0; //文件指针 StringBuffer strToken = new StringBuffer("");//扫描处理字符串while(true) { ch = exp.charAt(index); index++; //标识符(字母开头,数字或字符组成) if(Character.isLetter(ch)) { while(Character.isLetter(ch) || Character.isDigit(ch)) { strToken.append(ch); ch = exp.charAt(index); index++; } index--; String str = strToken.toString(); if(str.equals("if")) optr.add(new Word(str, 13)); else if(str.equals("else")) optr.add(new Word(str, 14)); else if(str.equals("then")) optr.add(new Word(str, 15)); else optr.add(new Word(str, 26)); } //数字 else if(Character.isDigit(ch)) { while(Character.isDigit(ch)) { strToken.append(ch); ch = exp.charAt(index); index++; } index--; optr.add(new Word(strToken.toString(), 26)); } //加号或自加 else if(ch == '+') { ch = exp.charAt(index); index++; if(ch == '+') optr.add(new Word("++", 21)); else if(ch == '=') optr.add(new Word("+=", 16)); else { index--; optr.add(new Word("+", 19)); } } //加号或自加 else if(ch == '-') { ch = exp.charAt(index); index++; if(ch == '-') optr.add(new Word("--", 21)); else if(ch == '=') optr.add(new Word("-=", 16)); else { index--; optr.add(new Word("-", 19)); } } //乘法或乘幂 else if(ch == '*') { ch = exp.charAt(index); index++; if(ch == '*') optr.add(new Word("**", 20)); else if(ch == '=') optr.add(new Word("*=", 16)); else { index--; optr.add(new Word("*", 20)); } } //除法或注释 else if(ch == '/') { ch = exp.charAt(index); index++; //多行注释 if(ch == '*') { while(true) { ch = exp.charAt(index); index++; if(ch == '*') { ch = exp.charAt(index); index++; if(ch == '/') break; else if(ch == '\n') { exp = Input.newLine(); index = 0; ch = exp.charAt(index); index++; } else index--; } else if(ch == '#') { int tIndex = index - 1; if(exp.length() > tIndex+9) { String end = exp.substring(tIndex, tIndex+9); if(end.equals("#?e_N_d?#")) break; } else { System.out.println("非法符号\'#\'后的语句忽略!"); exp = Input.newLine(); index = 0; break; } } else if(ch == '\n') { exp = Input.newLine(); index = 0; } } } //单行注释 else if(ch == '/') break; else if(ch == '=') optr.add(new Word("/=", 16)); else { index--; optr.add(new Word("/", 20)); } } //大于或大于等于或右移 else if(ch == '>') { ch = exp.charAt(index); index++; if(ch == '=') optr.add(new Word(">=", 18)); else if(ch == '>') optr.add(new Word(">>", 20)); else { index--; optr.add(new Word(">", 18)); } } //小于或小于等于或左移 else if(ch == ' tIndex+9) { String end = exp.substring(tIndex, tIndex+9); if(end.equals("#?e_N_d?#")) { optr.add(new Word("#", 27)); break; } } else { System.out.println("非法符号\'#\'后的语句忽略!"); optr.add(new Word("#", 27)); break; } } //清空扫描串 strToken.setLength(0);}return optr; }}

取消

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值