这学期的课程设计,用java写的词法分析器
来源:互联网 发布:魔兽世界编程宝典下载 编辑:程序博客网 时间:2024/05/26 08:41
也看了网上大神们的作品,他们的思路都好清晰啊,我只能领悟了在开始自己写了,大部分都加了注释。。。
为啥用java呢,c看着vc6.0和cb就头疼啊
修改了一下,先在空格也可以判断了。
代码输入
int a = 21 ;
int b = 22 ;
int c = 0 ;
c = a + b ;
a= a * b ;
int price = 22 ;
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #4e9072}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #931a68}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #4f76cb}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; color: #3933ff}span.s1 {color: #931a68}span.s2 {text-decoration: underline}span.s3 {color: #000000}span.s4 {color: #0326cc}span.s5 {color: #4e9072}span.s6 {color: #7e504f}span.s7 {text-decoration: underline ; color: #7e504f}span.s8 {color: #3933ff}span.s9 {color: #4f76cb}span.s10 {color: #91afcb}span.Apple-tab-span {white-space:pre}package parser;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Stack;
//输入文本:
//int a=21;
//int b=22;
//int c=0;
//c=a+b;
//a=a*b;
//int price=22;
public class Parser {
Stack<Object> retain = new Stack<>();
Stack<Object> token = new Stack<>();
Stack<Object> cons = new Stack<>();
Stack<Object> oper = new Stack<>();
Stack<Object> bound = new Stack<>();
public int ch;//每次获取的ascll字符
public int code = 0;//分类码
/**
* 1 基本字 保留字
* 2 标识符 自己的变量名
* 3 常数
* 4 算符
* 5 界符
*/
//保留字
String[] retainword = {"int","string","float","const","do",
"switch","for","if","else","while",
"break","new","return"};
//操作符
int operator[] = {42,43,45,47,61};
//界符
char delimiter[] = {',','{','}',';','(',')'};
//单词
StringBuffer strapp = new StringBuffer();
public static void main(String[] args) {
String[] delimiters = {"(",")",";",",","",""};
new Parser().scanner();
}
//输入的是否是字母
public boolean isLetter(){
if ((ch>64&&ch<91)||(ch>96&&ch<123)) {
return true;
}
return false;
}
//输入的是否是数字
public boolean isFigure(){
if (ch>47&&ch<58){
return true;
}
return false;
}
//输入的是否是空格
public boolean isSpace(int ch){
if (ch==32||(char)ch==' ') {
return true;
}
return false;
}
//是否是操作符
public boolean isOperator(int ch){
for (int i : operator) {
if(ch==i){
oper.push((char)ch);
return true;
}
}
return false;
}
//是否是界符
public boolean isDelimiters(int ch){
for (char c : delimiter) {
if((char)ch==c){
bound.push((char)ch);
return true;
}
}
return false;
}
//单词判断
public int isRetainW(){
for (String string : retainword) {
if (strapp.toString().equals(string)) {
retain.push(strapp.toString());
return 1;
}else if(strapp.length() != 0){
if(strapp.charAt(0)>='0' && strapp.charAt(0)<='9'){
cons.push(strapp.toString());
return 3;
}
}
}
String a = strapp.toString();
//如果拼接的字符串为0的话就放弃这个字符串,因为它是代码中的空格
if(a.equals("")){
//System.out.println(a+"!!!");
return 0;
}
token.push(strapp.toString());
return 2;
}
//字符串拼接
public void strAppend(char ch){
strapp.append(ch);
}
//输出结果
public void sysostr(){
code = isRetainW();
if (code!=0) {
System.out.println("("+code+","+strapp+")");
}
code = 0;
strapp.delete(0, strapp.length());
}
public void scanner(){
BufferedReader br;
try {
br = new BufferedReader(new FileReader("/Users/rqw1991/Downloads/dd.txt"));
//读入数据
while((ch=br.read())!=-1){
/**
*
*/
//是不是空格,不是空格继续
if (!isSpace(ch)) {
//是不是字母,是字母就开始进入字符串的拼接
if(isLetter()){
//如果不是空格而且是字母或者数字的话就开始进行句柄的拼接
if((isLetter()||isFigure())&&(!isSpace(ch))){
strAppend((char)ch);
}
}else if(isFigure()==true&&(!isSpace(ch))){
strAppend((char)ch);
}else if(isFigure()&&(!isSpace(ch))){
strAppend((char)ch);
}
//else if(ch == 61){
// if((strapp.length() != 0 )&& (strapp.charAt(0) == '=')){
// strapp.append((char)ch);
// System.out.println("("+4+",'"+strapp+"')");
// strapp.delete(0, strapp.length());
// }else{
// strapp.append((char)ch);
// }
// }
else if(isDelimiters(ch)&&(!isSpace(ch))){
sysostr();
System.out.println("("+4+","+(char) ch+")");
}
else if(isOperator(ch)&&(!isSpace(ch))){
sysostr();
System.out.println("("+5+","+(char) ch+")");
}
}else{
sysostr();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
int rsize = retain.size();
System.out.println("1:"+rsize);
for (int i = 0; i < rsize; i++) {
System.out.print(i+":"+retain.pop()+" ");
}
System.out.println();
int tsize = token.size();
System.out.println("2:"+token.size());
for (int i = 0; i < tsize; i++) {
System.out.print(i+":"+token.pop()+" ");
}
System.out.println();
int csize = cons.size();
System.out.println("3:"+cons.size());
for (int i = 0; i < csize; i++) {
System.out.print(i+":"+cons.pop()+" ");
}
System.out.println();
int osize = oper.size();
System.out.println("4:"+oper.size());
for (int i = 0; i < osize; i++) {
System.out.print(i+":"+oper.pop()+" ");
}
System.out.println();
int bsize = bound.size();
System.out.println("5:"+bound.size());
for (int i = 0; i < bsize; i++) {
System.out.print(i+":"+bound.pop()+" ");
}
}
}
}
package parser;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.lang.reflect.Array;import java.util.Arrays;import java.util.Stack;//输入文本://int a=21;//int b=22;//int c=0;//c=a+b;//a=a*b;//int price=22;public class Parser {Stack<Object> retain = new Stack<>();Stack<Object> token = new Stack<>();Stack<Object> cons = new Stack<>();Stack<Object> oper = new Stack<>();Stack<Object> bound = new Stack<>();public int ch;//每次获取的ascll字符public int code = 0;//分类码/** * 1 基本字 保留字 * 2 标识符 自己的变量名 * 3 常数 * 4 算符 * 5 界符 *///保留字String[] retainword = {"int","string","float","const","do","switch","for","if","else","while","break","new","return"};//操作符int operator[] = {42,43,45,47,61};//界符char delimiter[] = {',','{','}',';','(',')'};//单词StringBuffer strapp = new StringBuffer();public static void main(String[] args) {String[] delimiters = {"(",")",";",",","",""};new Parser().scanner();}//输入的是否是字母public boolean isLetter(){if ((ch>64&&ch<91)||(ch>96&&ch<123)) {return true;}return false;}//输入的是否是数字public boolean isFigure(){if (ch>47&&ch<58){return true;}return false;}//输入的是否是空格public boolean isSpace(int ch){if (ch==32||(char)ch==' ') {return true;}return false;}//是否是操作符public boolean isOperator(int ch){for (int i : operator) {if(ch==i){oper.push((char)ch); return true;}}return false;}//是否是界符public boolean isDelimiters(int ch){for (char c : delimiter) {if((char)ch==c){bound.push((char)ch); return true;}}return false;}//单词判断public int isRetainW(){for (String string : retainword) {if (strapp.toString().equals(string)) {retain.push(strapp.toString());return 1;}else if(strapp.length() != 0){ if(strapp.charAt(0)>='0' && strapp.charAt(0)<='9'){ cons.push(strapp.toString()); return 3; } } }String a = strapp.toString();//如果拼接的字符串为0的话就放弃这个字符串,因为它是代码中的空格if(a.equals("")){//System.out.println(a+"!!!");return 0;}token.push(strapp.toString());return 2;}//字符串拼接public void strAppend(char ch){strapp.append(ch);}//输出结果public void sysostr(){code = isRetainW();if (code!=0) {System.out.println("("+code+","+strapp+")");}code = 0;strapp.delete(0, strapp.length());}public void scanner(){BufferedReader br;try {br = new BufferedReader(new FileReader("/Users/rqw1991/Downloads/dd.txt"));//读入数据while((ch=br.read())!=-1){/** * *///是不是空格,不是空格继续if (!isSpace(ch)) {//是不是字母,是字母就开始进入字符串的拼接if(isLetter()){//如果不是空格而且是字母或者数字的话就开始进行句柄的拼接if((isLetter()||isFigure())&&(!isSpace(ch))){strAppend((char)ch);}}else if(isFigure()==true&&(!isSpace(ch))){strAppend((char)ch);}else if(isFigure()&&(!isSpace(ch))){strAppend((char)ch);}//else if(ch == 61){ // if((strapp.length() != 0 )&& (strapp.charAt(0) == '=')){ // strapp.append((char)ch); // System.out.println("("+4+",'"+strapp+"')"); // strapp.delete(0, strapp.length()); // }else{ // strapp.append((char)ch); // } // }else if(isDelimiters(ch)&&(!isSpace(ch))){ sysostr(); System.out.println("("+4+","+(char) ch+")"); } else if(isOperator(ch)&&(!isSpace(ch))){ sysostr(); System.out.println("("+5+","+(char) ch+")"); }}else{sysostr();}}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {int rsize = retain.size();System.out.println("1:"+rsize);for (int i = 0; i < rsize; i++) {System.out.print(i+":"+retain.pop()+" ");}System.out.println();int tsize = token.size();System.out.println("2:"+token.size());for (int i = 0; i < tsize; i++) {System.out.print(i+":"+token.pop()+" ");}System.out.println();int csize = cons.size();System.out.println("3:"+cons.size());for (int i = 0; i < csize; i++) {System.out.print(i+":"+cons.pop()+" ");}System.out.println();int osize = oper.size();System.out.println("4:"+oper.size());for (int i = 0; i < osize; i++) {System.out.print(i+":"+oper.pop()+" ");}System.out.println();int bsize = bound.size();System.out.println("5:"+bound.size());for (int i = 0; i < bsize; i++) {System.out.print(i+":"+bound.pop()+" ");}}}}
- 这学期的课程设计,用java写的词法分析器
- java写的词法分析器
- java写的词法分析器
- 用c写的词法分析器
- 用C语言写的Pascal语言词法分析器
- 转-c#写的一个词法分析器
- java实现的简单词法分析器
- java实现简单的词法分析器
- Java编写的C语言词法分析器
- C++的词法分析器
- 简单的词法分析器
- 简单的词法分析器
- 简单的词法分析器
- 我的词法分析器
- 简单的词法分析器
- 简单的词法分析器
- 词法分析器的实现
- 词法分析器的实现
- Guice 注解@Provides
- Wannacry之t.wnry核心库解密算法完全分析
- Oracle12C--集合(三十)
- fitsystemwindow
- 事物的四个特性
- 这学期的课程设计,用java写的词法分析器
- JVM底层又是如何实现synchronized的
- android之xml文件中特殊符号的引用
- iOS- 详解文本属性Attributes
- hadoop不同用户提交mr任务的时候存在某个用户报错
- 翻译《有关编程、重构及其他的终极问题?》——25.不要再用this指针和nullptr比较了
- struts2面试题
- 八皇后
- xcode8.*安装插件教程,亲测