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

📄 main.java

📁 Java写的词法/语法分析器。可生成JAVA语言或者是C++的词法和语法分析器。并可产生语法分析树和对该树进行遍历
💻 JAVA
字号:
package tinybasic;//import TinyBasicParser;//import TinyBasicLexer;import java.io.*;import antlr.collections.AST;import antlr.collections.impl.*;import antlr.debug.misc.*;import antlr.*;class Main {    Context theContext=new Context();    static boolean showTree = false;        Main(String f){	try {	    doFile(new File(f));	}	catch(Exception e) {		System.err.println("exception: "+e);		e.printStackTrace(System.err);   // so we can get stack trace	}    }        public static void main(String[] args) {		// Use a try/catch block for parser exceptions		//try {			// if we have at least one command-line argument			if (args.length > 0 ) {				System.err.println("Parsing...");				// for each directory/file specified on the command line				for(int i=0; i< args.length;i++) {					if ( args[i].equals("-showtree") ) {						showTree = true;					}					else {						new Main(args[i]); // parse it					}				} }			else				System.err.println("Usage: java TinyBasicParser [-showtree] "+                                   "<directory or file name>");		//}		//catch(Exception e) {		//	System.err.println("exception: "+e);		//	e.printStackTrace(System.err);   // so we can get stack trace		//}	}	// This method decides what action to take based on the type of	//   file we are looking at	public void doFile(File f)							  throws Exception {		// If this is a directory, walk each file/dir in that directory		if (f.isDirectory()) {			String files[] = f.list();			for(int i=0; i < files.length; i++)				doFile(new File(f, files[i]));		}		// otherwise, if this is a java file, parse it!		else if ((f.getName().length()>4) &&				f.getName().substring(f.getName().length()-4).equals(".bas")) {			System.err.println("   "+f.getAbsolutePath());			parseFile(f.getName(), new FileInputStream(f));		}	}	// Here's where we do the real work...	public void parseFile(String f, InputStream s)								 throws Exception {		try {			// Create a scanner that reads from the input stream passed to us			TinyBasicLexer lexer = new TinyBasicLexer(s);			// Create a parser that reads from the scanner			TinyBasicParser parser = new TinyBasicParser(lexer);			// start parsing at the compilationUnit rule			parser.compilationUnit(theContext);						// do something with the tree			doTreeAction(f, parser.getAST(), parser.getTokenNames());			//System.out.println(parser.getAST().toStringList());		}		catch (Exception e) {			System.err.println("parser exception: "+e);			e.printStackTrace();   // so we can get stack trace				}	}		public void doTreeAction(String f, AST t, String[] tokenNames) {		if ( t==null ) return;		if ( showTree ) {			((CommonAST)t).setVerboseStringConversion(true, tokenNames);			ASTFactory factory = new ASTFactory();			AST r = factory.create(0,"AST ROOT");			r.setFirstChild(t);			ASTFrame frame = new ASTFrame("TinyBasic AST", r);			frame.setVisible(true);			//System.out.println(t.toStringList());		}		TinyBasicTreeWalker tparse = new TinyBasicTreeWalker();		try {			tparse.compilationUnit(t,theContext);			//System.out.println("successful walk of result AST for "+f);		}		catch (ANTLRException e) {			System.err.println(e.getMessage());			e.printStackTrace();		}	}}

⌨️ 快捷键说明

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