001 package sysModel.parser; 002 003 import sysModel.ICmdFactory; 004 import sysModel.ISecurityAdapter; 005 import sysModel.env.AGlobalEnv; 006 007 import java.lang.reflect.Constructor; 008 import java.io.IOException; 009 010 /** 011 * Parser class. 012 * 013 * @author Mathias Ricken 014 */ 015 public class Parser { 016 /** 017 * Invoke the parser and recreate a global environment from a file. 018 * 019 * @param filename name of file 020 * @param factory factory to use for creation 021 * @param securityAdapter security adapter in use 022 * @return global environment 023 */ 024 public static AGlobalEnv parse(String filename, final ICmdFactory factory, final ISecurityAdapter securityAdapter) { 025 try { 026 final Lexer l = new Lexer(filename); 027 028 return (AGlobalEnv) l.nextToken().execute(new DefaultTokenVisitor() { 029 public Object defaultCase() { 030 throw new ParserException("Invalid token"); 031 } 032 033 public Object wordCase(String className) { 034 // read class name 035 try { 036 Class envClass = Class.forName(className); 037 Constructor envCtor = envClass.getConstructor(new Class[]{ICmdFactory.class, ISecurityAdapter.class}); 038 AGlobalEnv env = (AGlobalEnv) envCtor.newInstance(new Object[]{factory, securityAdapter}); 039 return env.parse(l); 040 } 041 catch (Exception e) { 042 throw new ParserException(e.toString(),e); 043 } 044 } 045 }); 046 } 047 catch (IOException e) { 048 throw new ParserException(e.toString(),e); 049 } 050 } 051 }