BNF for MIPS.jj

NON-TERMINALS

Goal ::= StmtList <EOF>
StmtList ::= Stmt ( StmtList )?
Stmt ::= Stat ( ";" )?
Stat ::= Label Instruction
| Label Data
| Label
| Instruction
| Data
| SymDef
| Directive
Label ::= <IDENTIFIER_COLON>
| <DECIMAL_COLON>
Instruction ::= OpCode ( Operand ( "," Operand ( "," Operand )? )? )?
Operand ::= Register
| "(" Register ")"
| FloatRegister
| AddrImmed ( "(" Register ")" )?
| <FLOAT>
Register ::= <DOLLAR_DECIMAL>
| RegisterName
| DollarRegisterName
FloatRegister ::= <DOLLAR_F_DECIMAL>
AddrImmed ::= LabelExpr ( ( "+" | "-" ) Expr )?
| Expr
LabelExpr ::= LabelRef ( "-" LabelRef )?
LabelRef ::= <DECIMAL_B>
| <DECIMAL_F>
| <IDENTIFIER>
| "."
Data ::= DataMode DataList
| ".ascii" <STRING>
| ".asciiz" <STRING>
| ".space" Expr
DataMode ::= ".byte"
| ".half"
| ".word"
| ".float"
| ".double"
DataList ::= DataExpr ( "," DataList )*
DataExpr ::= Expr ( ":" Expr )?
| <FLOAT> ( ":" <FLOAT> )?
SymDef ::= <IDENTIFIER_EQUAL> Expr
Directive ::= SetDir
| SegmentDir
| AlignDir
| SymbolDir
| BlockDir
| CompilerDir
SetDir ::= ".set" SetDirArgs
SetDirArgs ::= "volatile"
| "novolatile"
| "reorder"
| "noreorder"
| "at"
| "noat"
| "macro"
| "nomacro"
| "bopt"
| "nobopt"
| "move"
| "nomove"
SegmentDir ::= ".text"
| ".data"
| ".rdata"
| ".sdata"
AlignDir ::= ".align" Expr
SymbolDir ::= ".globl" <IDENTIFIER>
| ".extern" <IDENTIFIER> "," Constant
| ".comm" <IDENTIFIER> "," Constant
| ".lcomm" <IDENTIFIER> "," Constant
BlockDir ::= ".ent" <IDENTIFIER> ( "," Constant )?
| ".aent" <IDENTIFIER> "," Constant
| ".mask" Expr "," Expr
| ".fmask" Expr "," Expr
| ".frame" Register "," Expr "," Register
| ".end" ( <IDENTIFIER> )?
CompilerDir ::= ".alias" Register "," Register
| ".bgnb" Expr
| ".endb" Expr
| ".file" Constant <STRING>
| ".galive"
| ".gjaldef"
| ".gjrlive"
| ".lab" <IDENTIFIER>
| ".livereg" Expr "," Expr
| ".noalias" Register "," Register
| ".option" "flag"
| ".verstamp" Constant Constant
| ".vreg" Expr "," Expr
Expr ::= Term Expr_
Expr_ ::= ( BinaryOp Expr Expr_ )*
Term ::= UnaryOp Term
| Primary
Primary ::= Constant
| "(" Expr ")"
BinaryOp ::= "*"
| "/"
| "%"
| "+"
| "-"
| "<<"
| ">>"
| "&"
| "^"
| "|"
UnaryOp ::= "+"
| "-"
| "~"
| "!"
Constant ::= <DECIMAL>
| <HEXADECIMAL>
| <OCTAL>
| <CHARACTER>
| <IDENTIFIER>
RegisterName ::= "zero"
| "at"
| "v0"
| "v1"
| "a0"
| "a1"
| "a2"
| "a3"
| "t0"
| "t1"
| "t2"
| "t3"
| "t4"
| "t5"
| "t6"
| "t7"
| "s0"
| "s1"
| "s2"
| "s3"
| "s4"
| "s5"
| "s6"
| "s7"
| "t8"
| "t9"
| "k0"
| "k1"
| "gp"
| "sp"
| "s8"
| "fp"
| "ra"
DollarRegisterName ::= "$zero"
| "$at"
| "$v0"
| "$v1"
| "$a0"
| "$a1"
| "$a2"
| "$a3"
| "$t0"
| "$t1"
| "$t2"
| "$t3"
| "$t4"
| "$t5"
| "$t6"
| "$t7"
| "$s0"
| "$s1"
| "$s2"
| "$s3"
| "$s4"
| "$s5"
| "$s6"
| "$s7"
| "$t8"
| "$t9"
| "$k0"
| "$k1"
| "$gp"
| "$sp"
| "$s8"
| "$fp"
| "$ra"
OpCode ::= "abs"
| "add"
| "addciu"
| "addu"
| "and"
| "b"
| "bal"
| "bc0f"
| "bc0fl"
| "bc0t"
| "bc0tlbc1f"
| "bc1fl"
| "bc1t"
| "bc1tl"
| "bc2f"
| "bc2fl"
| "bc2t"
| "bc2tl"
| "beq"
| "beql"
| "beqz"
| "beqzl"
| "bge"
| "bgel"
| "bgeu"
| "bgeul"
| "bgez"
| "bgezal"
| "bgezall"
| "bgezl"
| "bgt"
| "bgtl"
| "bgtu"
| "bgtul"
| "bgtz"
| "bgtzl"
| "ble"
| "blel"
| "bleu"
| "bleul"
| "blez"
| "blezl"
| "blt"
| "bltl"
| "bltu"
| "bltul"
| "bltz"
| "bltzal"
| "bltzall"
| "bltzl"
| "bne"
| "bnel"
| "bnez"
| "bnezl"
| "break"
| "cache"
| "cfc0"
| "cfc1"
| "cfc2"
| "ctc0"
| "ctc1"
| "ctc2"
| "dabs"
| "dadd"
| "daddi"
| "daddiu"
| "daddu"
| "ddiv"
| "ddivd"
| "ddivdu"
| "ddivu"
| "div"
| "divd"
| "divdu"
| "divo"
| "divou"
| "divu"
| "dla"
| "dli"
| "dmadd16"
| "dmfc0"
| "dmfc1"
| "dmfc2"
| "dmtc0"
| "dmtc1"
| "dmtc2"
| "dmul"
| "dmulo"
| "dmulou"
| "dmult"
| "dmultu"
| "dneg"
| "dnegu"
| "drem"
| "dremu"
| "dret"
| "drol"
| "dror"
| "dsll"
| "dsllv"
| "dsll32"
| "dsra"
| "dsra32"
| "dsrl"
| "dsrlv"
| "dsrl32"
| "dsub"
| "dsubu"
| "eret"
| "ffc"
| "ffs"
| "flushd"
| "j"
| "jr"
| "jal"
| "jalr"
| "la"
| "lb"
| "lbu"
| "ld"
| "ldl"
| "ldr"
| "ldxc1"
| "lh"
| "lhu"
| "li"
| "ll"
| "lld"
| "lui"
| "lw"
| "lwc1"
| "lwl"
| "lwr"
| "lwu"
| "lwxc1"
| "madd"
| "maddu"
| "mad"
| "madu"
| "madd16"
| "max"
| "mfc0"
| "mfc1"
| "mfc2"
| "mfhi"
| "mflo"
| "min"
| "move"
| "movf"
| "movn"
| "movt"
| "movz"
| "msub"
| "msubu"
| "mtc0"
| "mtc1"
| "mtc2"
| "mthi"
| "mtlo"
| "mul"
| "mulu"
| "mulo"
| "mulou"
| "mult"
| "multu"
| "neg"
| "negu"
| "nop"
| "nor"
| "not"
| "or"
| "ori"
| "pref"
| "prefx"
| "r2u"
| "radd"
| "rem"
| "remu"
| "rfe"
| "rmul"
| "rol"
| "ror"
| "rsub"
| "sb"
| "sc"
| "scd"
| "sd"
| "sdbbp"
| "sdc1"
| "sdl"
| "sdr"
| "sdxc1"
| "selsl"
| "selsr"
| "seq"
| "sge"
| "sgeu"
| "sgt"
| "sgtu"
| "sh"
| "sle"
| "sleu"
| "sll"
| "sllv"
| "slt"
| "slti"
| "sltiu"
| "sltu"
| "sne"
| "sra"
| "srav"
| "srl"
| "srlv"
| "standby"
| "sub"
| "subu"
| "suspend"
| "sw"
| "swc1"
| "swl"
| "swr"
| "swxc1"
| "sync"
| "syscall"
| "teq"
| "teqi"
| "tge"
| "tgei"
| "tgeiu"
| "tgeu"
| "tlbp"
| "tlbr"
| "tlbwi"
| "tlbwr"
| "tlt"
| "tlti"
| "tltiu"
| "tltu"
| "tne"
| "tnei"
| "u2r"
| "uld"
| "ulh"
| "ulhu"
| "ulw"
| "usd"
| "ushusw"
| "waiti"
| "wb"
| "xor"
| "xori"
| "abs.s"
| "add.s"
| "c.eq.s"
| "c.f.s"
| "c.le.s"
| "c.lt.s"
| "c.nge.s"
| "c.ngl.s"
| "c.ngt.s"
| "c.ole.s"
| "c.olt.s"
| "c.seq.s"
| "c.sf.s"
| "c.ueq.s"
| "c.ule.s"
| "c.ult.s"
| "c.un.s"
| "ceil.l.d"
| "ceil.l.s"
| "ceil.w.d"
| "ceil.w.s"
| "cvt.d.l"
| "cvt.d.s"
| "cvt.d.w"
| "cvt.l.d"
| "cvt.l.s"
| "cvt.s.d"
| "cvt.s.l"
| "cvt.s.w"
| "cvt.w.d"
| "cvt.w.s"
| "div.s"
| "floor.l.d"
| "floor.l.s"
| "floor.w.d"
| "floor.w.s"
| "l.d"
| "l.s"
| "ldc1"
| "madd.s"
| "mov.s"
| "movf.s"
| "movn.s"
| "movt.s"
| "movz.s"
| "msub.s"
| "mul.s"
| "neg.s"
| "nmadd.s"
| "nmsub.s"
| "recip.s"
| "round.l.d"
| "round.l.s"
| "round.w.d"
| "round.w.s"
| "rsqrt.s"
| "s.d"
| "s.s"
| "sqrt.s"
| "sub.s"
| "trunc.l.d"
| "trunc.l.s"