Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
519 lines (487 sloc) 8.74 KB
lexer grammar ASMLexer;
tokens {
SECTION;
SECTION_INFO;
STMT;
ADDR;
BIT_DATA;
//jump address mode
JUMP_INT;
JUMP_PC;
JUMP_MD;
MODIFIER;
MULTI_MOD;
LABLE;
VARDEF;
ARRDEF;
DM_ACCESS;
PM_ACCESS;
CONDITION;
IF_STMT;
VALUE_EXP;
NULL;
CHAR_LITERAL;
STR_LITERAL;
DIRECTIVE;
NEGATE;
}
@lexer::header {
package test.analyze;
}
//tokens
StringLiteral
: //'"' (ID | EscapeSequence | NormalChar | WS )* '"'
'"' ~('\n'|'\r' | '"')* '"'
;
CharLiteral
: // '\'' (ID | EscapeSequence | NormalChar | WS )* '\''
'\'' ~('\n'|'\r' | '\'')* '\''
;
fragment
HexPrefix
: '0x' | '0X'
;
fragment
HexDigit
: ('0'..'9'|'a'..'f'|'A'..'F')
;
INT
: ('0' .. '9')+ '.' ('0' .. '9')* Exponent?
| '.' ( '0' .. '9' )+ Exponent?
| ('0' .. '9')+ Exponent
| ('0' .. '9')+
| HexPrefix (HexDigit )+
;
fragment
Exponent
: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
;
fragment LCHAR
: CHAR|'_'
;
fragment CHAR
: LC|UC
;
fragment LC
: 'a'..'z'
;
fragment UC
: 'A'..'Z'
;
WS
: (' ' | '\t' | '\r' | '\n'){$channel=HIDDEN;} ;
DOT_ADI_
: '_ADI_';
DOT_DATE_
: '_DATE_';
DOT_FILE_
: '_FILE';
DOT_ALGIGN : '.align';
DOT_COMPRESS : '.compress';
DOT_ELIF : '.elif';
DOT_ELSE : '.else';
DOT_ENDIF : '.endif';
DOT_EXTERN : '.extern';
DOT_FILE : '.file';
DOT_FILE_ATTR : '.file_attr';
DOT_FORCECOMPRESS : '.forcecompress';
DOT_GLOBAL : '.global';
DOT_IF : '.if';
DOT_IMPORT : '.import';
DOT_INCBINARY
: '.inc/binary';
DOT_LEFTMARGIN : '.leftmargin';
DOT_LIST : '.list';
DOT_LIST_DATA : '.list_data';
DOT_LIST_DATFILE : '.list_datfile';
DOT_LIST_DEFTAB : '.list_deftab';
DOT_LIST_LOCTAB : '.list_loctab';
DOT_LIST_WRAPDATA : '.list_wrapdata';
DOT_NEWPAGE : '.newpage';
DOT_NOCOMPRESS : '.nocompress';
DOT_NOLIST_DATA : '.nolist_data';
DOT_NOLIST_DATFILE : '.nolist_datfile';
DOT_NOLIST_WRAPDATA : '.nolist_wrapdata';
DOT_PAGELENGTH : '.pagelength';
DOT_PAGEWIDTH : '.pagewidth';
DOT_PRECISION : '.precision';
DOT_ROUND_MINUS : '.round_minus';
DOT_ROUND_NEAREST : '.round_nearest';
DOT_ROUND_PLUS : '.round_plus';
DOT_ROUND_ZERO : '.round_zero';
DOT_PREVIOUS : '.previous';
DOT_SECTION : '.section';
DOT_SEGMENT : '.segment';
DOT_ENDSEG : '.endseg';
DOT_STRUCT : '.struct';
DOT_TYPE: '.type';
DOT_VAR : '.var';
DOT_WEAK : '.weak';
ABS : 'abs';
AC : 'ac';
ACS : 'acs';
ACT : 'act';
ADDRESS
: 'address';
AND : 'and';
ASHIFT : 'ashift';
ASTAT : 'astat';
AV : 'av';
B0 : 'b0';
B1 : 'b1';
B2 : 'b2';
B3 : 'b3';
B4 : 'b4';
B5 : 'b5';
B6 : 'b6';
B7 : 'b7';
B8 : 'b8';
B9 : 'b9';
B10 : 'b10';
B11 : 'b11';
B12 : 'b12';
B13 : 'b13';
B14 : 'b14';
B15 : 'b15';
BB : 'bb';
BCLR : 'bclr';
BF : 'bf';
BIT : 'bit';
BITREV : 'bitrev';
BM : 'bm';
BSET : 'bset';
BTGL : 'btgl';
BTST : 'btst';
BY : 'by';
CA : 'ca';
CACHE : 'cache';
CALL : 'call';
CH : 'ch';
CI : 'ci';
CJUMP : 'cjump';
CL : 'cl';
CLR : 'clr';
CLIP : 'clip';
COMP : 'comp';
COPYSIGN : 'copysign';
COS : 'cos';
CURLCNTR : 'curlcntr';
DADDR : 'daddr';
DB : 'db';
DEC : 'dec';
DEF : 'def';
DIM : 'dim';
DM : 'dm';
DMA1E : 'dm1e';
DMA1s : 'dm1s';
DMA2E : 'dm2e';
DMA2s : 'dm2s';
DMADR : 'dmadr';
DMABANK1 : 'dmabank1';
DMABANK2 : 'dmabank2';
DMABANK3 : 'dmabank3';
DMAWAIT : 'dmawait';
DO : 'do';
DOVL : 'dovl';
EB : 'eb';
ECE : 'ece';
EF : 'ef';
ELSE : 'else';
EMUCLK : 'emuclk';
EMUCLK2 : 'emuclk2';
EMUIDLE : 'emuidle';
EMUN : 'emun';
EOS : 'eos';
EQ : 'eq';
EX : 'ex';
EXP : 'exp';
EXP2 : 'exp2';
F0 : 'f0';
F1 : 'f1';
F2 : 'f2';
F3 : 'f3';
F4 : 'f4';
F5 : 'f5';
F6 : 'f6';
F7 : 'f7';
F8 : 'f8';
F9 : 'f9';
F10 : 'f10';
F11 : 'f11';
F12 : 'f12';
F13 : 'f13';
F14 : 'f14';
F15 : 'f15';
FADDR : 'faddr';
FDEP : 'fdep';
FEXT : 'fext';
FILE : 'file';
FIX : 'fix';
FLAG0_IN : 'flag0_in';
FLAG1_IN : 'flag1_in';
FLAG2_IN : 'flag2_in';
FLAG3_IN : 'flag3_in';
FLOAT : 'float';
FLUSH : 'flush';
FMERG : 'fmerg';
FOREVER : 'forever';
FPACK : 'fpack';
FRACTIONAL : 'fractional';
FTA : 'fta';
FTB : 'ftb';
FTC : 'ftc';
FUNPACK : 'funpack';
GCC_COMPILED : 'gcc_compiled';
GE : 'ge';
GT : 'gt';
I0 : 'i0';
I1 : 'i1';
I2 : 'i2';
I3 : 'i3';
I4 : 'i4';
I5 : 'i5';
I6 : 'i6';
I7 : 'i7';
I8 : 'i8';
I9 : 'i9';
I10 : 'i10';
I11 : 'i11';
I12 : 'i12';
I13 : 'i13';
I14 : 'i14';
I15 : 'i15';
IDLE : 'idle';
IDLE16 : 'idle16';
IDLEI15 : 'idlei15';
IDLEI16 : 'idlei16';
IF : 'if';
IMASK : 'imask';
IMASKP : 'imaskp';
INC : 'inc';
IRPTL : 'irptl';
JUMP : 'jump';
L0 : 'l0';
L1 : 'l1';
L2 : 'l2';
L3 : 'l3';
L4 : 'l4';
L5 : 'l5';
L6 : 'l6';
L7 : 'l7';
L8 : 'l8';
L9 : 'l9';
L10 : 'l10';
L11 : 'l11';
L12 : 'l12';
L13 : 'l13';
L14 : 'l14';
L15 : 'l15';
LA : 'la';
LADDR : 'laddr';
LCE : 'lce';
LCNTR : 'lcntr';
LE : 'le';
LEFTO : 'lefto';
LEFTZ : 'leftz';
LENGTH : 'length';
LINE : 'line';
LN : 'ln';
LOAD : 'load';
LOG2 : 'log2';
LOGB : 'logb';
LOOP : 'loop';
LR : 'lr';
LSHIFT : 'lshift';
LT : 'lt';
M0 : 'm0';
M1 : 'm1';
M2 : 'm2';
M3 : 'm3';
M4 : 'm4';
M5 : 'm5';
M6 : 'm6';
M7 : 'm7';
M8 : 'm8';
M9 : 'm9';
M10 : 'm10';
M11 : 'm11';
M12 : 'm12';
M13 : 'm13';
M14 : 'm14';
M15 : 'm15';
MANT : 'mant';
MAX : 'max';
MBM : 'mbm';
MIN : 'min';
MOD : 'mod';
MODE1 : 'mode1';
MODE2 : 'mode2';
MODIFY : 'modify';
MR0B : 'mr0b';
MR0F : 'mr0f';
MR1B : 'mr1b';
MR1F : 'mr1f';
MR2B : 'mr2b';
MR2F : 'mr2f';
MRB : 'mrb';
MRF : 'mrf';
MS : 'ms';
MV : 'mv';
NBM : 'nbm';
NE : 'ne';
NOFO : 'nofo';
NOFZ : 'nofz';
NOP : 'nop';
NOPSPECIAL : 'nopspecial';
NOT : 'not';
NU : 'nu';
NW : 'nw';
OFFSETOF : 'offsetof';
OR : 'or';
P20 : 'p20';
P32 : 'p32';
P40 : 'p40';
PACK : 'pack';
PAGE : 'page';
PASS : 'pass';
PC : 'pc';
PCSTK : 'pcstk';
PCSTKP : 'pcstkp';
PM : 'pm';
PMADR : 'pmadr';
PMBANK1 : 'pmbank1';
PMDAE : 'pmdae';
PMDAS : 'pmdas';
POP : 'pop';
POVL0 : 'povl0';
POVL1 : 'povl1';
PSA1E : 'psa1e';
PSA1S : 'psa1s';
PSA2E : 'psa2e';
PSA3E : 'psa3e';
PSA3S : 'psa3s';
PSA4E : 'psa4e';
PSA4S : 'psa4s';
PUSH : 'push';
PX : 'px';
PX1 : 'px1';
PX2 : 'px2';
RETAIN_NAME : 'retain_name';
R0 : 'r0';
R1 : 'r1';
R2 : 'r2';
R3 : 'r3';
R4 : 'r4';
R5 : 'r5';
R6 : 'r6';
R7 : 'r7';
R8 : 'r8';
R9 : 'r9';
R10 : 'r10';
R11 : 'r11';
R12 : 'r12';
R13 : 'r13';
R14 : 'r14';
R15 : 'r15';
READ : 'read';
RECIPS : 'recips';
RFRAME : 'rframe';
RND : 'rnd';
ROT : 'rot';
RS : 'rs';
RSQRTS : 'rsqrts';
RTI : 'rti';
RTS : 'rts';
SAT : 'sat';
SCALB : 'scalb';
SCL : 'scl';
SE : 'se';
SET : 'set';
SF : 'sf';
SI : 'si';
SIN : 'sin';
SIZE : 'size';
SIZEOF : 'sizeof';
SQR : 'sqr';
SR : 'sr';
SSF : 'ssf';
SSFR : 'ssfr';
SSI : 'ssi';
SSIR : 'ssir';
ST : 'st';
STEP : 'step';
STKY : 'stky';
STRUCT : 'struct';
STS : 'sts';
SUF : 'suf';
SUFR : 'sufr';
SUI : 'sui';
SV : 'sv';
SW : 'sw';
SZ : 'sz';
TAG : 'tag';
TCOUNT : 'tcount';
TF : 'tf';
TGL : 'tgl';
TPERIOD : 'tperiod';
TRUE : 'true';
TRUNC : 'trunc';
TST : 'tst';
TYPE : 'type';
TRAP : 'trap';
UF : 'uf';
UI : 'ui';
UNPACK : 'unpack';
UNTIL : 'until';
UR : 'ur';
USF : 'usf';
USFR : 'usfr';
USI : 'usi';
USIR : 'usir';
USTAT1 : 'ustat1';
USTAT2 : 'ustat2';
UUF : 'uuf';
UUFR : 'uufr';
UUI : 'uui';
UUIR : 'uuir';
VAL : 'val';
WITH : 'with';
XOR : 'xor';
PLUS : '+' ;
MINUS : '-' ;
MULT : '*' ;
DIV : '/' ;
DIV_MOD : '%';
EQU : '=';
I_OR : '|'
;
I_XOR : '^'
;
COMMA : ',';
COLON : ':';
SEMICOLON
: ';';
LPARENTHESE
: '(';
RPARENTHESE
: ')';
LBRACKET: '[';
RBRACKET: ']';
LBRACE : '{';
RBRACE : '}';
AT : '@';
NO_INIT : 'no_init';
ZERO_INIT
: 'zero_init';
RUNTIME_INIT
: 'runtime_init';
CODE : 'code';
DATA : 'data';
DATA64 : 'data64';
DMAONLY : 'dmaonly';
ID : ('a'..'z'|'A'..'Z'|'_'|'\.') ('a'..'z'|'A'..'Z'|'_'|'\.' | '0'..'9')*
;
COMMENT
: '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
| '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
;