⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lexer.java

📁 用java实现的编译器. 包括语法分析
💻 JAVA
字号:
package lexer;import java.io.*;import java.util.*;import symbols.*;public class Lexer {	public static int line = 1;	char peek = ' ';	HashMap words = new HashMap();	@SuppressWarnings("unchecked")		void reserve(Word w) { words.put(w.lexeme, w);}	public Lexer() {		reserve(new Word("if", Tag.IF));		reserve(new Word("else", Tag.ELSE));		reserve(new Word("while", Tag.WHILE));		reserve(new Word("do", Tag.DO));		reserve(new Word("break", Tag.BREAK));		reserve(Word.True);		reserve(Word.False);		reserve(Type.Int);		reserve(Type.Char);		reserve(Type.Bool);		reserve(Type.Float);	}	void readch() throws IOException { 		peek = (char)System.in.read();	}	boolean readch(char c) throws IOException {		readch();		if(peek != c) return false;		peek = ' ';		return true;	}	@SuppressWarnings("unchecked")		public Token scan() throws IOException {			for(;;readch()) {				if(peek == ' ' || peek == '\t') continue;				else if(peek == '\n') line = line +1;				else break;			}			switch(peek) {				case '&':					if(readch('&')) return Word.and;					else return new Token('&');				case '|':					if(readch('|')) return Word.or;					else return new Token('|');				case '=':					if(readch('=')) return Word.eq;					else return new Token('=');				case '!':					if(readch('=')) return Word.ne;					else return new Token('!');				case '<':					if(readch('=')) return Word.le;					else return new Token('<');				case '>':					if(readch('=')) return Word.ge;					else return new Token('>');			}			if(Character.isDigit(peek)) {				int v = 0;				do {					v = 10*v + Character.digit(peek, 10);					readch();				}while(Character.isDigit(peek));				if(peek != '.') return new Num(v);				float x = v;				float d = 10;				for(;;){					readch();					if(!Character.isDigit(peek)) break;					x = x + Character.digit(peek, 10) / d;					d = d*10;				}				return new Real(x);			}			if(Character.isLetter(peek)) {				StringBuffer b = new StringBuffer();				do {					b.append(peek);					readch();				}while(Character.isLetterOrDigit(peek));				String s = b.toString();				Word w = (Word)words.get(s);				if(w != null) return w;				w = new Word(s, Tag.ID);				words.put(s, w);				return w;			}			Token tok = new Token(peek);			peek =  ' ';			return  tok; 		}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -