/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package robotinterface.algorithm.parser.parameterparser; import java.util.ArrayList; import java.util.List; import robotinterface.algorithm.parser.decoder.DecoderConstants; import robotinterface.algorithm.parser.decoder.ParseException; import robotinterface.algorithm.parser.decoder.Token; /** * * @author antunes2 */ public class ParameterParser { private static final ArrayList<Argument> args = new ArrayList(); public static Argument[] parse(String functionName, List<Integer> argType, List<String> argEx, int nParameters, Token token) throws ParseException { if (nParameters >= 0 && argEx.size() != nParameters) { throw new ParseException(token, new int[][]{}, new String[]{ "Numero de parametros na função \"" + functionName + "\": esperado " + nParameters + ", encontrado " + argEx.size() + "." }); } int minParameterNumber = -nParameters - 1; if (minParameterNumber > 0 && argEx.size() < minParameterNumber) { throw new ParseException(token, new int[][]{}, new String[]{ "Numero de parametros na função \"" + functionName + "\": esperado ao menos " + minParameterNumber + ", encontrado " + argEx.size() + "." }); } // System.out.println(">>" + functionName); // // for (int i = 0; i < argEx.size(); i++) { // System.out.println("p" + i + ": '" + argEx.get(i) + "'::" + argType.get(i)); // } args.clear(); for (int i = 0; i < argEx.size(); i++) { int type = argType.get(i); String str = argEx.get(i); switch (type) { case DecoderConstants.INTEGER_LITERAL: case DecoderConstants.DECIMAL_LITERAL: case DecoderConstants.HEX_LITERAL: case DecoderConstants.OCTAL_LITERAL: case DecoderConstants.FLOATING_POINT_LITERAL: type = Argument.NUMBER_LITERAL; break; case DecoderConstants.STRING_LITERAL: str = str.replace("\"", ""); if (str.contains(" ")){ type = Argument.TEXT; } else { type = Argument.STRING_LITERAL; } break; case DecoderConstants.IDENTIFIER: type = Argument.SINGLE_VARIABLE; break; default: type = Argument.EXPRESSION; } args.add(new Argument(str, type)); } return args.toArray(new Argument[args.size()]); } }