/******************************************************************************* * Copyright (c) 2009 University of Edinburgh. * All rights reserved. This program and the accompanying materials are made * available under the terms of the BSD Licence, which accompanies this feature * and can be downloaded from http://groups.inf.ed.ac.uk/pepa/update/licence.txt ******************************************************************************/ package uk.ac.ed.inf.biopepa.tests; import java.io.*; import java_cup.runtime.Symbol; import uk.ac.ed.inf.biopepa.core.compiler.ModelCompiler; import uk.ac.ed.inf.biopepa.core.compiler.ProblemInfo; import uk.ac.ed.inf.biopepa.core.dom.Model; import uk.ac.ed.inf.biopepa.core.dom.internal.BioPEPALexer; import uk.ac.ed.inf.biopepa.core.dom.internal.BioPEPAParser; import uk.ac.ed.inf.biopepa.core.dom.internal.BioPEPASymbolFactory; import uk.ac.ed.inf.biopepa.core.interfaces.Result; import uk.ac.ed.inf.biopepa.core.interfaces.Solver; import uk.ac.ed.inf.biopepa.core.sba.*; import uk.ac.ed.inf.biopepa.core.sba.Parameters.Parameter; public class Parser { public static void main(String[] args) throws Exception { String source = null; if (args.length == 0) { System.err.println("Please specify input file:"); System.err.println(" java -jar biopepa.jar <filename.biopepa>"); System.exit(1); } else { source = readFile(args[0]); } long tic = System.currentTimeMillis(); Model model = parse(source); System.out.println("Preview of BioPEPA Compiler 0.0.1.v20080208"); System.out.println("*******************************************\n"); ModelCompiler c = new uk.ac.ed.inf.biopepa.core.compiler.ModelCompiler(model); ProblemInfo[] problems = c.compile(); long toc = System.currentTimeMillis(); if (problems.length == 0) { System.out.println("Model accepted."); System.out.println("Elapsed time:" + (toc - tic) + " ms"); SBAModel sba = new SBAModel(c); sba.parseBioPEPA(); System.out.println(sba.toString()); System.out.println("--------------------------------------------------------------------------------"); Solver solver = Solvers.getSolverInstance("gillespie"); Parameters parameters = solver.getRequiredParameters(); parameters.setValue(Parameter.Stop_Time, 20.0); parameters.setValue(Parameter.Independent_Replications, 1000); parameters.setValue(Parameter.Components, new String[] { "X", "Y", "Z" }); Result result = solver.startTimeSeriesAnalysis(sba, parameters, null); String[] components = result.getComponentNames(); System.out.println("Final population levels"); for (int i = 0; i < components.length; i++) System.out.println(components[i] + " = " + result.getPopulation(i)); } else { System.out.println("Compiler returned with the following warnings/errors:"); System.out.println(); for (ProblemInfo p : problems) { System.out.print(p.message); if (p.sourceRange == null) System.out.println(" [?]"); else System.out.println(" [" + p.sourceRange.getChar() + "]"); } } System.exit(0); } private static String readFile(String location) throws IOException { BufferedReader r = new BufferedReader(new FileReader(location)); StringBuffer buffer = new StringBuffer(); String line = null; while ((line = r.readLine()) != null) { buffer.append(line + "\n"); } return buffer.toString(); } public static Model parse(String source) throws Exception { // ComplexSymbolFactory symbolFactory = new ComplexSymbolFactory(); BioPEPASymbolFactory symbolFactory = new BioPEPASymbolFactory(); BioPEPAParser parser = new BioPEPAParser(new BioPEPALexer(new StringReader(source), symbolFactory), symbolFactory); Symbol symbol = parser.parse(); return (Model) symbol.value; } }