options { // LOOKAHEAD = 1; // CHOICE_AMBIGUITY_CHECK = 2; // OTHER_AMBIGUITY_CHECK = 1; STATIC = false; // DEBUG_PARSER = false; // DEBUG_LOOKAHEAD = false; // DEBUG_TOKEN_MANAGER = false; // ERROR_REPORTING = true; // JAVA_UNICODE_ESCAPE = false; // UNICODE_INPUT = false; // IGNORE_CASE = false; // USER_TOKEN_MANAGER = false; // USER_CHAR_STREAM = false; //BUILD_PARSER = true; // BUILD_TOKEN_MANAGER = true; // SANITY_CHECK = true; // FORCE_LA_CHECK = false; } PARSER_BEGIN(Telefones) import java.io.*; public class Telefones { public static void main(String args[]) throws ParseException { Telefones parser = null; if (args.length == 0) { parser = new Telefones(System.in); } else { try { parser = new Telefones(new FileInputStream (args[0])); } catch (Exception e) { System.err.println("Falha ao abrir arquivo!"); e.printStackTrace(); System.exit(1); } } boolean loop = true; while (loop) { try { parser.Input(); loop = false; } catch (Exception e) { System.err.println("Sequencia inválida!!"); parser = new Telefones(System.in); } catch (TokenMgrError a) { System.err.println("Nonnubers?? Are you drunk?"); parser = new Telefones(System.in); } } } } PARSER_END(Telefones) SKIP : {"\n"} TOKEN : { | > | > | |)"-"> | ")"> } void Input() : {} { (|)* }