Montador assembly em javacc

Disponível somente no TrabalhosFeitos
  • Páginas : 5 (1103 palavras )
  • Download(s) : 0
  • Publicado : 22 de maio de 2012
Ler documento completo
Amostra do texto
/**
* JavaCC file
*/

options {
JDK_VERSION = "1.5";
IGNORE_CASE = true;
FORCE_LA_CHECK= true;
LOOKAHEAD = 4;
}
PARSER_BEGIN(eg1)
package Montador;
import java.io.FileInputStream;
import java.io.IOException;

public class eg1 {
public static void main(String args[]) throws ParseException{
int contador;
try
{ eg1 parser = new eg1(new java.io.FileInputStream(args[0]));
} catch (IOException e)
{
System.out.println("Falha ao abrir arquivo.");
System.exit(0);
}
contador = 1;

try {
while (eg1.Linha() == 0) {
//System.out.println("OK." + contador);
contador++;

}
}
catch (Exception e) {
System.out.println("Erro de Sintaxe na linha " + contador + ".");
//System.out.println(e.getMessage());

} catch (Error e) {System.out.println("Erro de Sintaxe na linha " + contador + ".");
//System.out.println(e.getMessage());
}
System.out.println("OK. Código sem erro sintático");
}

}
PARSER_END(eg1)

SKIP : { " " }
SKIP : { ".segment" | ".bss" | ".text" }

TOKEN :
{
< EOL : "\n" | "\r" | "\t" | "\r\n" >
}

TOKEN:
{
< String:"\'"(~["\n","\r"])*"\'" >
}

TOKEN: { < Coment :";"(~["\n","\r"])*> }

TOKEN : {
< Registrador : "AX" | "CX" | "DX" | "BX" | "SP" | "BP" | "SI" | "DI" | "AL" | "CL" | "DL" | "BL" | "AH" | "CH" | "DH" | "BH" >
}

TOKEN: /* Funções */
{
< INT: "int" > |
< MOV : "mov" > |
< ORG: "org" > |
< times: "times" > |
< POPA: "popa" > |
< PUSHA: "pusha"> |
< POPF : "popf" > |
<PUSHF: "pushf" > |
< POP: "pop" > |
< PUSH: "push" > |
< CALL: "call" > |
< RET: "ret" > |
< ADD: "add" > |
< SUB: "sub" > |
< MUL: "mul" ("AL"|"AX")","("AL"|"AX")> |
< IMUL: "imul"> |
< DIV: "div"> |
< IDIV: "idiv"> |
< CMP: "cmp"> |
< AND: "and"> |
< OR: "or"> |
< DEC: "dec"> |
<INC: "inc"> |
< NEG: "neg"> |
< JMP: "jmp">|
< JCC: "JA" | "JAE" | "JB" | "JBE" | "JC" | "JCXZ" | "JECXZ" | "JE" | "JG" | "JGE" | "JL" | "JLE" | "JNA" | "JNAE" | "JNB" | "JNBE" | "JNC" | "JNE" | "JNG" | "JNGE" | "JNL" | "JNLE" | "JNO" | "JNP" | "JNS" | "JNZ" | "JO" | "JP" | "JPE" | "JPO" | "JS" | "JZ" | "JA" | "JAE" | "JB" | "JBE" | "JC" | "JE" | "JG" | "JGE" | "JL" | "JLE"| "JNA" | "JNAE" | "JNB" | "JNBE" | "JNC" | "JNE" | "JNG" | "JNGE" | "JNL" | "JNLE" | "JNO" | "JNP" | "JNS" | "JNZ" | "JO" | "JP" | "JPE" | "JPO" | "JS" | "JZ">
}

TOKEN :
{
< Hexa:(( < NUM > | ["a" - "f"] )+)"h" >
}

TOKEN : {
< Letra: ( ["A" - "Z"] ) >
}

TOKEN : {
< Decimal: (< NUM>)+ >
| < NUM: (["0" - "9"]) >
}

//TOKEN : { <Decimal: (< NUM>)+ > }

TOKEN : { < TamAtribuicao : "db" | "dw" > }

TOKEN:
{
< Variavel :("_")*(< Letra >)(< Letra >|<Decimal>|"_")* >
}

TOKEN: { < Dereferenciamento: "["< Variavel >"]" | "[< BX >]" | "[< SI >]" | "[< DI >]" >
}

void Caracter(): {}
{
< NUM> | < Letra >
}

void Imediato(): {}
{<Decimal> | < Hexa >
}

void Texto(): {}
{
(Caracter())+
}

void Comentario(): {}
{
<Coment >
}

void Rotulo(): {}
{
< Variavel >":"
}

void Atribuicao(): {}
{
< Variavel > [<times > < Decimal >] <TamAtribuicao > ((< String> | Imediato() | "'$'") [","])+
}

void Int(): {}
{
< INT> < Hexa>
}

voidOrg(): {}
{
< ORG > < Hexa >
}

void MOVreg2(): {}
{
< MOV > < Registrador > "," <Registrador>
}

void MOVregvar(): {}
{
< MOV > <Registrador>","< Variavel >
}

void MOVvarreg(): {}
{
< MOV > <Variavel > "," <Registrador>
}

void MOVregimed():{}
{
< MOV> < Registrador>","Imediato()
}

void...
tracking img