xrocedure/xrocedure.c

168 lines
11 KiB
C
Raw Normal View History

#include <xolatile/xtandard.c>
#include <xolatile/xyntax.c>
enum {
word_abort, word_else, word_new, word_return, word_abs, word_elsif, word_not, word_reverse,
word_abstract, word_end, word_null, word_accept, word_entry, word_select, word_access, word_of,
word_separate, word_aliased, word_exit, word_or, word_some, word_all, word_others, word_subtype,
word_and, word_for, word_out, word_array, word_function, word_at, word_tagged, word_generic,
word_package, word_task, word_begin, word_goto, word_pragma, word_body, word_private, word_then,
word_type, word_case, word_in, word_constant, word_until, word_is, word_raise, word_use,
word_if, word_declare, word_range, word_delay, word_limited, word_record, word_when, word_delta,
word_loop, word_rem, word_while, word_digits, word_renames, word_with, word_do, word_mod,
word_requeue, word_xor, word_procedure, word_protected, word_interface, word_synchronized, word_exception, word_overriding,
word_terminate, word_count
};
int main (void) {
char * separators = ".,:;<=>+-*/&|()\" \t\r\n";
char * keywords [] = {
"abort", "else", "new", "return", "abs", "elsif", "not", "reverse",
"abstract", "end", "null", "accept", "entry", "select", "access", "of",
"separate", "aliased", "exit", "or", "some", "all", "others", "subtype",
"and", "for", "out", "array", "function", "at", "tagged", "generic",
"package", "task", "begin", "goto", "pragma", "body", "private", "then",
"type", "case", "in", "constant", "until", "is", "raise", "use",
"if", "declare", "range", "delay", "limited", "record", "when", "delta",
"loop", "rem", "while", "digits", "renames", "with", "do", "mod",
"requeue", "xor", "procedure", "protected", "interface", "synchronized", "exception", "overriding",
"terminate"
};
int keycodes [word_count] = { 0 };
int x_keyword [word_count] = { 0 };
int word;
int offset = 0;
int select = 0;
int length = 0;
char * buffer = null;
int comment, x_comment = 0,
character, x_character = 0,
string, x_string = 0,
brackets, x_brackets = 0,
operators, x_operators = 0,
number, x_number = 0,
identifier, x_identifier = 0;
comment = syntax_define (false, false, "--", "\n", '\0', 0, 0);
character = syntax_define (false, false, "'", "'", '\\', 0, 0);
string = syntax_define (false, false, "\"", "\"", '\\', 0, 0);
for (word = 0; word != word_count; ++word) {
keycodes [word] = syntax_define (false, true, keywords [word], separators, '\0', 0, 0);
}
brackets = syntax_define (true, false, "()", "", '\0', 0, 0);
operators = syntax_define (true, false, ".,:;<=>+-*/&|'", "", '\0', 0, 0);
number = syntax_define (true, true, "0123456789", separators, '\0', 0, 0);
identifier = syntax_define (true, true, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_", separators, '\0', 0, 0);
buffer = record ();
for (offset = 0; buffer [offset] != '\0'; offset += length) {
select = syntax_select (& buffer [offset], & length);
if (select == comment) x_comment++;
else if (select == character) x_character++;
else if (select == string) x_string++;
else if (select == keycodes [word_abort]) x_keyword [word_abort]++;
else if (select == keycodes [word_else]) x_keyword [word_else]++;
else if (select == keycodes [word_new]) x_keyword [word_new]++;
else if (select == keycodes [word_return]) x_keyword [word_return]++;
else if (select == keycodes [word_abs]) x_keyword [word_abs]++;
else if (select == keycodes [word_elsif]) x_keyword [word_elsif]++;
else if (select == keycodes [word_not]) x_keyword [word_not]++;
else if (select == keycodes [word_reverse]) x_keyword [word_reverse]++;
else if (select == keycodes [word_abstract]) x_keyword [word_abstract]++;
else if (select == keycodes [word_end]) x_keyword [word_end]++;
else if (select == keycodes [word_null]) x_keyword [word_null]++;
else if (select == keycodes [word_accept]) x_keyword [word_accept]++;
else if (select == keycodes [word_entry]) x_keyword [word_entry]++;
else if (select == keycodes [word_select]) x_keyword [word_select]++;
else if (select == keycodes [word_access]) x_keyword [word_access]++;
else if (select == keycodes [word_of]) x_keyword [word_of]++;
else if (select == keycodes [word_separate]) x_keyword [word_separate]++;
else if (select == keycodes [word_aliased]) x_keyword [word_aliased]++;
else if (select == keycodes [word_exit]) x_keyword [word_exit]++;
else if (select == keycodes [word_or]) x_keyword [word_or]++;
else if (select == keycodes [word_some]) x_keyword [word_some]++;
else if (select == keycodes [word_all]) x_keyword [word_all]++;
else if (select == keycodes [word_others]) x_keyword [word_others]++;
else if (select == keycodes [word_subtype]) x_keyword [word_subtype]++;
else if (select == keycodes [word_and]) x_keyword [word_and]++;
else if (select == keycodes [word_for]) x_keyword [word_for]++;
else if (select == keycodes [word_out]) x_keyword [word_out]++;
else if (select == keycodes [word_array]) x_keyword [word_array]++;
else if (select == keycodes [word_function]) x_keyword [word_function]++;
else if (select == keycodes [word_at]) x_keyword [word_at]++;
else if (select == keycodes [word_tagged]) x_keyword [word_tagged]++;
else if (select == keycodes [word_generic]) x_keyword [word_generic]++;
else if (select == keycodes [word_package]) x_keyword [word_package]++;
else if (select == keycodes [word_task]) x_keyword [word_task]++;
else if (select == keycodes [word_begin]) x_keyword [word_begin]++;
else if (select == keycodes [word_goto]) x_keyword [word_goto]++;
else if (select == keycodes [word_pragma]) x_keyword [word_pragma]++;
else if (select == keycodes [word_body]) x_keyword [word_body]++;
else if (select == keycodes [word_private]) x_keyword [word_private]++;
else if (select == keycodes [word_then]) x_keyword [word_then]++;
else if (select == keycodes [word_type]) x_keyword [word_type]++;
else if (select == keycodes [word_case]) x_keyword [word_case]++;
else if (select == keycodes [word_in]) x_keyword [word_in]++;
else if (select == keycodes [word_constant]) x_keyword [word_constant]++;
else if (select == keycodes [word_until]) x_keyword [word_until]++;
else if (select == keycodes [word_is]) x_keyword [word_is]++;
else if (select == keycodes [word_raise]) x_keyword [word_raise]++;
else if (select == keycodes [word_use]) x_keyword [word_use]++;
else if (select == keycodes [word_if]) x_keyword [word_if]++;
else if (select == keycodes [word_declare]) x_keyword [word_declare]++;
else if (select == keycodes [word_range]) x_keyword [word_range]++;
else if (select == keycodes [word_delay]) x_keyword [word_delay]++;
else if (select == keycodes [word_limited]) x_keyword [word_limited]++;
else if (select == keycodes [word_record]) x_keyword [word_record]++;
else if (select == keycodes [word_when]) x_keyword [word_when]++;
else if (select == keycodes [word_delta]) x_keyword [word_delta]++;
else if (select == keycodes [word_loop]) x_keyword [word_loop]++;
else if (select == keycodes [word_rem]) x_keyword [word_rem]++;
else if (select == keycodes [word_while]) x_keyword [word_while]++;
else if (select == keycodes [word_digits]) x_keyword [word_digits]++;
else if (select == keycodes [word_renames]) x_keyword [word_renames]++;
else if (select == keycodes [word_with]) x_keyword [word_with]++;
else if (select == keycodes [word_do]) x_keyword [word_do]++;
else if (select == keycodes [word_mod]) x_keyword [word_mod]++;
else if (select == keycodes [word_requeue]) x_keyword [word_requeue]++;
else if (select == keycodes [word_xor]) x_keyword [word_xor]++;
else if (select == keycodes [word_procedure]) x_keyword [word_procedure]++;
else if (select == keycodes [word_protected]) x_keyword [word_protected]++;
else if (select == keycodes [word_interface]) x_keyword [word_interface]++;
else if (select == keycodes [word_synchronized]) x_keyword [word_synchronized]++;
else if (select == keycodes [word_exception]) x_keyword [word_exception]++;
else if (select == keycodes [word_overriding]) x_keyword [word_overriding]++;
else if (select == keycodes [word_terminate]) x_keyword [word_terminate]++;
else if (select == brackets) x_brackets++;
else if (select == operators) x_operators++;
else if (select == number) x_number++;
else if (select == identifier) x_identifier++;
}
echo ("Comments : "); echo (number_to_string (x_comment)); echo ("\n");
echo ("Strings : "); echo (number_to_string (x_string)); echo ("\n");
echo ("Numbers : "); echo (number_to_string (x_number)); echo ("\n");
echo ("Keywords : List\n");
for (word = 0; word != word_count; ++word) {
if (x_keyword [word] != 0) {
echo ("\t > "); echo (keywords [word]); echo (" <> "); echo (number_to_string (x_keyword [word])); echo ("\n");
}
}
buffer = deallocate (buffer);
return (log_success);
}