Described with YACC format:
1 type : BYTE 2 | WORD 3 | DWORD 4 name : NAME 5 number : NUMBER 6 | C_H_NUM 7 | C_O_NUM 8 | LIT_CH 9 const_str : CONST_STRING 10 expression : name 11 | name '[' expression ']' 12 | ch_funz 13 | number 14 | CHECK '(' expression ')' 15 | CONV '(' expression ')' 16 | CONV16 '(' expression ')' 17 | CONV24 '(' expression ')' 18 | CONV32 '(' expression ')' 19 | '(' expression ')' 20 | expression '+' expression 21 | expression LSHIFT expression 22 | expression RSHIFT expression 23 | expression NOT_EQ expression 24 | expression MIU expression 25 | expression MAU expression 26 | expression MIN expression 27 | expression MAG expression 28 | expression EQ expression 29 | expression AND expression 30 | expression OR expression 31 | expression '-' expression 32 | expression '*' expression 33 | expression '/' expression 34 | expression '%' expression 35 | '-' expression 36 | NOT expression 37 | assignment 38 | SIZEOF '(' name ')' 39 | OFFSETOF '(' name ')' 40 | GETVMVAR '(' const_str ')' 41 | COMMAND '(' const_str ')' 42 | LEN '(' name ')' 43 | STRLEN '(' name ')' 44 assignment: name '=' expression 45 | name '[' expression ']' '=' expression 46 ch_funz : name '(' l_express ')' 47 | name '(' ')' 48 l_express : expression 49 | l_express ',' expression 50 program : llines 51 | 52 llines : declarations 53 | c_function 54 | llines declarations 55 | llines c_function 56 declaration : prototype 57 prototype : type name '(' ')' ';' 58 | type name '(' l_variables ')' ';' 59 | ARRAY name ';' 60 l_variables : type name 61 | name 62 | l_variables ',' type name 63 | l_variables ',' name 64 def_var : def_v ';' 65 def_v : type name 66 | def_v ',' name 67 | type error 68 l_instructions : l_instructions instruction 69 | instruction 70 | error 71 instruction: instr ';' 72 | construction 73 | def_var 74 | '{' l_instructions '}' 75 | '{' '}' 76 construction : c_do 77 | c_while 78 | c_if 79 | c_for 80 do : DO 81 while : WHILE 82 for : FOR 83 if : IF 84 else : ELSE 86 c_do : do instruction WHILE '(' expression ')' ';' 87 | do instruction WHILE error 89 c_while : while '(' expression ')' instruction 90 | while error 91 t_if : 92 c_if : if '(' expression ')' t_if instruction 94 c_if : if '(' expression ')' t_if instruction else instruction 95 | if error 99 c_for : for '(' expression ';' expression ';' expression ')' instruction 100 | for error 102 c_function : tipo nome '(' ')' '{' l_instructions '}' 104 c_function : tipo nome '(' l_variables ')' '{' l_instructions '}' 105 | tipo nome '(' error ')' 106 instr : CONTINUE 107 | BREAK 108 | expression 109 | TITLE '(' cost_str ')' 110 | TITLE '(' cost_str ',' l_express ')' 111 | PRINT '(' cost_str ',' l_express ')' 112 | PRINT '(' cost_str ')' 113 | APRINT '(' cost_str ',' nome ')' 114 | CLEAR '(' name ')' 115 | RETURN expression 116 | RESETLOG '(' ')' 117 | RESETLOG '(' expression ',' expression ')' 118 | RESETLOG '(' expression ',' expression ',' expression ')' 119 | prototype
Low Precedence | |
Operators | It is associated with the term on the: |
'=' | right |
OR | left |
AND | left |
EQ,NOT_EQ,'<','>',MIU,MAU | left |
LSHIFT,RSHIFT | left |
'+','-' | left |
'*','/','%' | left |
NOT,MENO_UNARIO | right |
CH_FUNZ | left |
High Precedence |
LEX format:
SPACE ([\t\r\n ]) SPACES ({SPACE}*) LETTER ([a-zA-Z]) DIGIT ([0-9]) F_DIGIT ([1-9]) DECIMAL ({DIGIT}*{F_DIGIT}|0) UNTIL_END ([^\n]*) R_REM (\/\/) HEX ((("0x")|("0X"))([a-fA-F]|{DIGIT})+) OCT (("0")([0-7])+) INTEGER ({F_DIGIT}{DIGIT}*) VAR_NAME ((("_")|{LETTER})({LETTER}|{DIGIT}|("_"))*) CONST_STRING (\"[^\"\n]*\") CONST_INT_SHORT ({INTEGER}|[0]) QUOTE \'([^\\']|\\[^'\\]+|\\\\)\' OP ([-+=*/{}();,:%])|("\[")|("\]") VAR ({VAR_NAME}) COMMENT ("/*"([^*]*|"*"+[^*/])"*"+\/) COMMENT_L ("//".*) %% \xd /* Discards LF*/ {COMMENT} {/* Discards comment */ } {COMMENTO_L} {/* Discards comment */ } do {return DO; } if {return IF; } else {return ELSE; } while {return WHILE; } for {return FOR; } return {return RETURN; } break {return BREAK; } continue {return CONTINUE; } array {return ARRAY; } byte {return BYTE; } word {return WORD; } dword {return DWORD; } sizeof {return SIZEOF; } offsetof {return OFFSETOF; } getvmvar {return GETVMVAR; } printf {return PRINT; } aprintf {return APRINT; } clear {return CLEAR; } arrlen {return LEN; } strlen {return STRLEN; } resetlog {CHSAY("RESETLOG");return RESETLOG; } title {return TITLE; } check {return CHECK; } conv {return CONV; } conv16 {return CONV16; } conv24 {return CONV24; } conv32 {return CONV32; } {CONST_STRING} {return CONST_STRING; } {CONST_INT_SHORT} {return NUMBER; } {HEX} {return C_H_NUM; } {OCT} {return C_O_NUM; } {QUOTE} {return LIT_CH; } "<" {return MIN;} ">" {return MAG;} AND {return AND;} "&" {return AND;} "&&" {return AND;} OR {return OR;} "|" {return OR;} "||" {return OR;} NOT {return NOT;} "!" {return NOT;} "~" {return NOT;} {OP} {return *yytext; } "==" {return EQ; } "!=" {return NOT_EQ; } ">=" {return MAU; } "<=" {return MIU; } "<<" {return LSHIFT; } ">>" {return RSHIFT; } {VAR} {return NAME;} {SPACE}+ {} . {printf("Scanner error at line %d\n",yylineno);return (SC_ERROR);} %%
'AND' can be written : 'AND', '&&', '&'
'OR' can be written : 'OR', '||', '|'
'NOT' can be written : 'NOT', '!', '~'
'=' can't be written '=='. In file xFF, double equal means comparison while single equal means assignment.