options { DEBUG_TOKEN_MANAGER = false; IGNORE_CASE=true ; } PARSER_BEGIN(NibaParser) import java.io.*; import java.util.Vector; public class NibaParser { private static FileGen nibagen = new FileGen(); public static void main(String args[]) throws ParseException { if (args.length < 1){ System.out.println("Uso: java NibaParser "); System.exit(1); } NibaParser parser = null; try { parser = new NibaParser (new FileInputStream (args[0])); } catch (FileNotFoundException e) { System.err.println("Arquivo nao encontrado!"); System.exit (1); } try { parser.ParseFile(); nibagen.resolveSymbols(); nibagen.genNibaFile(new File("out.niba")); System.out.println("out.niba file generated suscefully!"); } catch (Exception e) { e.printStackTrace(); } } } PARSER_END(NibaParser) // ******** Inicio da Area de Regras Gramaticas ******** SKIP : { "\r" | "\t" | " " | "\f" | "\n" } MORE: { ";" : INLINE_COMMENT } SPECIAL_TOKEN: { : DEFAULT } MORE: { < ~[] > } // reconhece qquer caracter como BYTE TOKEN : { //Opcodes ||||||||||||||||)> | < #LD: "ld"> //| < #PUSH: "push"> //| < #POP: "pop"> | < #JPNZ: "jpnz"> | < #JPNC: "jpnc"> | < #JPPE: "jppe"> | < #JPPO: "jppo"> | < #JPZ: "jpz"> | < #JPM: "jpm"> | < #JPP: "jpp"> | < #JUMPS: (||||||)> | < #JP: ("jp"|"jump")> | < #CALL: "call"> | < #RET: "ret"> | < #NOP: "nop"> | < #HALT: "halt"> | < #ADD: "add"> | < #SUB: "sub"> | < #AND: "and"> | < #XOR: "xor"> | < #OR: "or"> | < #CP: "cp"> | < #INC: "inc"> | < #DEC: "dec"> | < PUSHES: (||)> | < POPS: (||)> | < #PUSHBC: "pushbc"> | < #PUSHDE: "pushde"> | < #PUSHHL: "pushhl"> | < #POPBC: "popbc"> | < #POPDE: "popde"> | < #POPHL: "pophl"> | < DATA: "data:"> //Registradores /*| < #REGA: "a"> | < #REGB: "b"> | < #REGC: "c"> | < #REGD: "d"> | < #REGE: "e"> | < #REGH: "h"> | < #REGL: "l">*/ | < REGISTER: "$" ("a"|"b"|"c"|"d"|"e"|"h"|"l")> //Outros | < TWODOT: ":"> | < #OUTRO_CHAR: ["_"]> | < #LETRA: ["a"-"z"] > | < #DIGIT: ["0"-"9","a"-"f"] > | < NUMBER: "0x" ()*> | < ID: (||["_"])*> | > } void ParseFile() : {} { (Code())* (Data())* } void Code(): { String label = ""; String opcode; String param1 = ""; String param2 = ""; } { [