import java.util.Scanner;
public class Lexer {
public static final int EOI = 0;
public static final int SEMI = 1;
public static final int PLUS = 2;
public static final int TIMES = 3;
public static final int LP = 4;
public static final int RP = 5;
public static final int NUM_OR_ID = 6;
private int lookAhead = -1;
public String yytext = "";
public int yyleng = 0;
public int yylineno = 0;
private String input_buffer = "";
private String current = "";
private boolean isAlnum(char c) {
if (Character.isAlphabetic(c) == true ||
Character.isDigit(c) == true) {
return true;
}
return false;
}
private int lex() {
while (true) {
while (current == "") {
Scanner s = new Scanner(System.in);
while (true) {
String line = s.nextLine();
if (line.equals("end")) {
break;
}
input_buffer += line;
}
s.close();
if (input_buffer.length() == 0) {
current = "";
return EOI;
}
current = input_buffer;
++yylineno;
current.trim();
}//while (current != "")
for (int i = 0; i < current.length(); i++) {
yyleng = 0;
yytext = current.substring(0, 1);
switch (current.charAt(i)) {
case ';': current = current.substring(1); return SEMI;
case '+': current = current.substring(1); return PLUS;
case '*': current = current.substring(1);return TIMES;
case '(': current = current.substring(1);return LP;
case ')': current = current.substring(1);return RP;
case '\n':
case '\t':
case ' ': current = current.substring(1); break;
default:
if (isAlnum(current.charAt(i)) == false) {
System.out.println("Ignoring illegal input: " + current.charAt(i));
}
else {
while (isAlnum(current.charAt(i))) {
i++;
yyleng++;
} // while (isAlnum(current.charAt(i)))
yytext = current.substring(0, yyleng);
current = current.substring(yyleng);
return NUM_OR_ID;
}
break;
} //switch (current.charAt(i))
}// for (int i = 0; i < current.length(); i++)
}//while (true)
}//lex()
public boolean match(int token) {
if (lookAhead == -1) {
lookAhead = lex();
}
return token == lookAhead;
}
public void advance() {
lookAhead = lex();
}
public void runLexer() {
while (!match(EOI)) {
System.out.println("Token: " + token() + " ,Symbol: " + yytext );
advance();
}
}
private String token() {
String token = "";
switch (lookAhead) {
case EOI:
token = "EOI";
break;
case PLUS:
token = "PLUS";
break;
case TIMES:
token = "TIMES";
break;
case NUM_OR_ID:
token = "NUM_OR_ID";
break;
case SEMI:
token = "SEMI";
break;
case LP:
token = "LP";
break;
case RP:
token = "RP";
break;
}
return token;
}
}

coding迪斯尼
- 粉丝: 2921
最新资源
- 什么是技术转移SaaS平台?它如何利用AI+数智应用解决技术转移中的难题?.docx
- 数字化技术转移机构如何利用AI+数智应用破局?.docx
- 数字化科技服务如何通过AI+数智应用赋能传统科技机构,解决产品同质化难题?.docx
- 有什么办法能通过AI+数智应用全方位优化技术转移机构服务,提高效率?.docx
- 在当前经济环境下,技术转移机构如何借助AI+数智应用把握机遇实现突破?.docx
- 怎样的AI+数智应用创新管理系统能真正提升科技管理效率与价值创造?.docx
- 中小科技服务机构预算有限,如何通过AI+数智应用低成本打造服务能力?.docx
- 中小科技服务机构预算有限,如何通过AI+数智应用低成本实现服务产品的升级?_1.docx
- 基于改进QSGS四参数随机生长法的三维多孔介质重构及性能评估
- 纯电动两档AT变速箱的Simulink模型设计及解析:包含换挡控制与执行模块的详尽注释与文档
- 宽幅CMOS可编程增益放大器研究.pdf
- 三菱PLC程序-基于PLC的3x3升降横移立体车库控制系统设计,附件同邮箱 升降横移
- 高校科技管理如何通过AI+数智应用提升服务质量与管理效率?.docx
- 技术转移服务如何借助AI+数智应用实现业务升级与客户增长?.docx
- 技术转移机构如何借助AI+数智应用解决市场竞争激烈、服务能力不足的问题?.docx
- 技术转移机构如何借助AI+数智应用让服务方式更便捷?.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



- 1
- 2
前往页