diff options
Diffstat (limited to 'include/cmmm')
| -rw-r--r-- | include/cmmm/rs274ngc/lexeme.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/include/cmmm/rs274ngc/lexeme.h b/include/cmmm/rs274ngc/lexeme.h new file mode 100644 index 0000000..c7efc45 --- /dev/null +++ b/include/cmmm/rs274ngc/lexeme.h | |||
| @@ -0,0 +1,89 @@ | |||
| 1 | // include/cmmm/lexeme.h | ||
| 2 | |||
| 3 | #ifndef INCLUDED__CMMM__RS274NGC__LEXEME__H | ||
| 4 | #define INCLUDED__CMMM__RS274NGC__LEXEME__H | ||
| 5 | |||
| 6 | // #define CMMM__LEXEME__RS274NGC__STRIP_VENDOR | ||
| 7 | |||
| 8 | #include <stddef.h> | ||
| 9 | #include <stdint.h> | ||
| 10 | #include "cmmm/string-view.h" | ||
| 11 | |||
| 12 | #define CMMM__RS274NGC__LEXEME__KINDS() \ | ||
| 13 | X (COMMENT, ";[^\n]*|\\([^())]*\\)" ) \ | ||
| 14 | X (MODULO, "[Mm][ \t]*[Oo][ \t]*[Dd]" ) \ | ||
| 15 | X (NATURAL_LOG_OF, "[Ll][ \t]*[Nn]" ) \ | ||
| 16 | X (NON_EXCLUSIVE_OR, "[Oo][ \t]*[Rr]" ) \ | ||
| 17 | X (ABSOLUTE_VALUE, "[Aa][ \t]*[Bb][ \t]*[Ss]" ) \ | ||
| 18 | X (AND, "[Aa][ \t]*[Nn][ \t]*[Dd]" ) \ | ||
| 19 | X (ARC_COSINE, "[Aa][ \t]*[Cc][ \t]*[Oo][ \t]*[Ss]" ) \ | ||
| 20 | X (ARC_SINE, "[Aa][ \t]*[Ss][ \t]*[Ii][ \t]*[Nn]" ) \ | ||
| 21 | X (ARC_TANGENT, "[Aa][ \t]*[Tt][ \t]*[Aa][ \t]*[Nn]" ) \ | ||
| 22 | X (COSINE, "[Cc][ \t]*[Oo][ \t]*[Ss]" ) \ | ||
| 23 | X (EXCLUSIVE_OR, "[Xx][ \t]*[Oo][ \t]*[Rr]" ) \ | ||
| 24 | X (E_RAISED_TO, "[Ee][ \t]*[Xx][ \t]*[Pp]" ) \ | ||
| 25 | X (FIX_DOWN, "[Ff][ \t]*[Ii][ \t]*[Xx]" ) \ | ||
| 26 | X (FIX_UP, "[Ff][ \t]*[Uu][ \t]*[Pp]" ) \ | ||
| 27 | X (ROUND, "[Rr][ \t]*[Oo][ \t]*[Uu][ \t]*[Nn][ \t]*[Dd]") \ | ||
| 28 | X (SINE, "[Ss][ \t]*[Ii][ \t]*[Nn]" ) \ | ||
| 29 | X (SQUARE_ROOT, "[Ss][ \t]*[Qq][ \t]*[Rr][ \t]*[Tt]" ) \ | ||
| 30 | X (TANGENT, "[Tt][ \t]*[Aa][ \t]*[Nn]" ) \ | ||
| 31 | X (WORD_LETTER, "[ABCDFGHIJKLMPQRSTXYZabcdfghijklmpqrstxyz]" ) \ | ||
| 32 | X (REAL_NUMBER, "[0-9 \t]*(\\.[0-9 \t]+)?" ) \ | ||
| 33 | X (LINE_NUMBER, "[Nn][0-9 \t]+" ) \ | ||
| 34 | X (PARAMETER_SIGN, "#" ) \ | ||
| 35 | X (BRACKET_RIGHT, "\\]" ) \ | ||
| 36 | X (BRACKET_LEFT, "\\[" ) \ | ||
| 37 | X (EQUAL_SIGN, "=" ) \ | ||
| 38 | X (MINUS, "-" ) \ | ||
| 39 | X (PLUS, "\\+" ) \ | ||
| 40 | X (POWER, "\\*\\*" ) \ | ||
| 41 | X (TIMES, "\\*" ) \ | ||
| 42 | X (SLASH, "/" ) \ | ||
| 43 | |||
| 44 | #ifndef CMMM__RS274NGC__LEXEME__STRIP_VENDOR | ||
| 45 | #define X(SYM, ...) CMMM__RS274NGC__LEXEME__KIND__##SYM, | ||
| 46 | #else | ||
| 47 | #define X(SYM, ...) \ | ||
| 48 | CMMM__RS274NGC__LEXEME__KIND__##SYM, \ | ||
| 49 | RS274NGC__LEXEME__KIND__##SYM = CMMM__RS274NGC__LEXEME__KIND__##SYM, | ||
| 50 | #endif // CMMM__RS274NGC__LEXEME__STRIP_VENDOR | ||
| 51 | enum cmmm__rs274ngc__lexeme__kind { | ||
| 52 | CMMM__RS274NGC__LEXEME__KIND__INVALID, | ||
| 53 | CMMM__RS274NGC__LEXEME__KIND__END_OF_LINE, | ||
| 54 | CMMM__RS274NGC__LEXEME__KIND__END_OF_FILE, | ||
| 55 | CMMM__RS274NGC__LEXEME__KINDS () | ||
| 56 | CMMM__RS274NGC__LEXEME__KIND_COUNT, | ||
| 57 | #ifdef CMMM__RS274NGC__LEXEME__STRIP_VENDOR | ||
| 58 | RS274NGC__LEXEME__KIND__INVALID = CMMM__RS274NGC__LEXEME__KIND__INVALID, | ||
| 59 | RS274NGC__LEXEME__KIND__END_OF_LINE = CMMM__RS274NGC__LEXEME__KIND__END_OF_LINE, | ||
| 60 | RS274NGC__LEXEME__KIND__END_OF_FILE = CMMM__RS274NGC__LEXEME__KIND__END_OF_FILE, | ||
| 61 | RS274NGC__LEXEME__KIND_COUNT = CMMM__RS274NGC__LEXEME__KIND_COUNT | ||
| 62 | #endif // CMMM__RS274NGC__LEXEME__STRIP_VENDOR | ||
| 63 | }; | ||
| 64 | #undef X | ||
| 65 | |||
| 66 | #define CMMM__RS274NGC__LEXEME__REGEX_OFFSET 3 | ||
| 67 | #define CMMM__RS274NGC__LEXEME__REGEX_COUNT \ | ||
| 68 | (CMMM__RS274NGC__LEXEME__KIND_COUNT - CMMM__RS274NGC__LEXEME__REGEX_OFFSET) | ||
| 69 | |||
| 70 | struct cmmm__rs274ngc__lexeme { | ||
| 71 | struct cmmm__string_view sv; | ||
| 72 | enum cmmm__rs274ngc__lexeme__kind kind; | ||
| 73 | }; | ||
| 74 | |||
| 75 | extern const char *cmmm__rs274ngc__lexeme__kind_names[CMMM__RS274NGC__LEXEME__KIND_COUNT]; | ||
| 76 | |||
| 77 | #ifdef CMMM__RS274NGC__LEXEME__STRIP_VENDOR | ||
| 78 | #define RS274NGC__LEXEME__STRIP_VENDOR CMMM__RS274NGC__LEXEME__STRIP_VENDOR | ||
| 79 | #define RS274NGC__LEXEME__KINDS CMMM__RS274NGC__LEXEME__KINDS | ||
| 80 | #define rs274ngc__lexeme__kind cmmm__rs274ngc__lexeme__kind | ||
| 81 | #define RS274NGC__LEXEME__REGEX_OFFSET CMMM__RS274NGC__LEXEME__REGEX_OFFSET | ||
| 82 | #define RS274NGC__LEXEME__REGEX_COUNT CMMM__RS274NGC__LEXEME__REGEX_COUNT | ||
| 83 | #define rs274ngc__lexeme cmmm__rs274ngc__lexeme | ||
| 84 | #define rs274ngc__lexeme__kind_names cmmm__rs274ngc__lexeme__kind_names | ||
| 85 | #endif // CMMM__RS274NGC__LEXEME__STRIP_VENDOR | ||
| 86 | |||
| 87 | #endif // INCLUDED__RS274NGC__LEXEME__H | ||
| 88 | |||
| 89 | // include/cmmm/lexeme.h ends here | ||
