80 lines
6.2 KiB
C
Executable File
80 lines
6.2 KiB
C
Executable File
static procedure language_highlight_eaxhla (language_structure * language, syntax_structure * syntax) {
|
|
character * separators = ".,+-*/[]<>=; \t\r\n";
|
|
|
|
character * declarations [] = {
|
|
"program", "procedure", "machine", "library", "fast", "unix", "begin", "end",
|
|
"if", "then", "else", "repeat", "break", "continue", "until", "exit",
|
|
"fastcall", "shell", "alias", "macro", "scope", "unscope", "use", "include"
|
|
};
|
|
|
|
character * types [] = {
|
|
"integer_64", "character6", "s32", "s64", "natural_64", "natural_86", "u32", "u64",
|
|
"f32", "f64", "real_640", "v0", "character28", "natural_828", "integer_1656", "natural_1656",
|
|
"s512", "u512"
|
|
};
|
|
|
|
character * instructions [] = {
|
|
"jnpe", "jpo", "jnpo", "jpe", "jnb", "jae", "jnbe", "ja",
|
|
"jna", "jbe", "jnae", "jb", "jnl", "jge", "jnle", "jg",
|
|
"jng", "jle", "jnge", "jl", "cmovng", "cmovle", "cmovnge", "cmovl",
|
|
"cmovnpe", "cmovpo", "cmovnpo", "cmovpe", "cmovnb", "cmovae", "cmovnbe", "cmova",
|
|
"cmovna", "cmovbe", "cmovnae", "cmovb", "cmovnl", "cmovge", "cmovnle", "cmovg",
|
|
"setnpe", "setpo", "setnpo", "setpe", "setnb", "setae", "setnbe", "seta",
|
|
"setna", "setbe", "setnae", "setb", "setnl", "setge", "setnle", "setg",
|
|
"setng", "setle", "setnge", "setl", "enter", "call", "jmp", "mov",
|
|
"add", "or", "adc", "sbb", "and", "sub", "xor", "cmp",
|
|
"inc", "dec", "not", "neg", "mul", "imul", "div", "idiv",
|
|
"fadd", "fmul", "fcom", "fcomp", "fsub", "fsubr", "fdiv", "fdivr",
|
|
"rol", "ror", "rcl", "rcr", "sal", "shr", "shl", "sar",
|
|
"nop", "retn", "retf", "leave", "popf", "pushf", "in", "out",
|
|
"syscall", "cpuid", "fnop", "fchs", "fabs", "ftst", "fxam", "fld1",
|
|
"fldl2t", "fldl2e", "fldpi", "fldlg2", "fldln2", "fldz", "f2xm1", "fyl2x",
|
|
"fptan", "fpatan", "fxtract", "fprem1", "fdecstp", "fincstp", "fprem", "fyl2xp1",
|
|
"fsqrt", "fsincos", "frndint", "fscale", "fsin", "fcos", "pop", "push",
|
|
"bswap", "bsf", "bsr", "loop", "loope", "loopne"
|
|
};
|
|
|
|
character * registers [] = {
|
|
"rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
|
|
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
|
|
"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
|
|
"r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d",
|
|
"ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
|
|
"r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w",
|
|
"al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
|
|
"r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
|
|
};
|
|
|
|
integer word;
|
|
|
|
syntax_define (syntax, false, false, "#", "\n", '\0', language->comment_colour, language->comment_effect);
|
|
syntax_define (syntax, false, false, "---", "\n", '\0', language->comment_colour, language->comment_effect);
|
|
syntax_define (syntax, false, false, "//", "\n", '\0', language->comment_colour, language->comment_effect);
|
|
syntax_define (syntax, false, false, "'", "'", '\\', language->character_colour, language->character_effect);
|
|
syntax_define (syntax, false, false, "\"", "\"", '\\', language->string_colour, language->string_effect);
|
|
|
|
for (natural_64 word = 0; word < array_length (declarations); ++word) {
|
|
syntax_define (syntax, false, true, declarations [word], separators, '\0', language->keyword_colour, language->keyword_effect);
|
|
}
|
|
|
|
for (natural_64 word = 0; word < array_length (types); ++word) {
|
|
syntax_define (syntax, false, true, types [word], separators, '\0', language->type_colour, language->type_effect);
|
|
}
|
|
|
|
for (natural_64 word = 0; word < array_length (instructions); ++word) {
|
|
syntax_define (syntax, false, true, instructions [word], " \t\n", '\0', language->extension_colour, language->extension_effect);
|
|
}
|
|
|
|
for (natural_64 word = 0; word < array_length (registers); ++word) {
|
|
syntax_define (syntax, false, true, registers [word], separators, '\0', language->register_colour, language->register_effect);
|
|
}
|
|
|
|
syntax_define (syntax, true, false, "()[]{}", "", '\0', language->bracket_colour, language->bracket_effect);
|
|
syntax_define (syntax, true, false, ".,+*-/%$<>=;", "", '\0', language->operator_colour, language->operator_effect);
|
|
|
|
syntax_define (syntax, true, true, language_digits, separators, '\0', language->number_colour, language->number_effect);
|
|
syntax_define (syntax, true, true, language_lowercase, separators, '\0', language->lowercase_colour, language->lowercase_effect);
|
|
syntax_define (syntax, true, true, language_uppercase, separators, '\0', language->uppercase_colour, language->uppercase_effect);
|
|
syntax_define (syntax, true, true, "_", separators, '\0', language->underscore_colour, language->underscore_effect);
|
|
}
|