summaryrefslogtreecommitdiff
path: root/include/cmmm
diff options
context:
space:
mode:
authorLibravatar Martin Michalec <martin@michalec.dev>2026-02-22 03:17:28 +0000
committerLibravatar Martin Michalec <martin@michalec.dev>2026-02-22 03:17:28 +0000
commit0e6c848fdf7082e771ff797cbc2488897b660695 (patch)
tree84484928a26853fd36599916b52b585ca8c05396 /include/cmmm
parentadd dependencies (diff)
downloadrs274ngc-0e6c848fdf7082e771ff797cbc2488897b660695.tar.gz
add lexeme implementation
Diffstat (limited to 'include/cmmm')
-rw-r--r--include/cmmm/rs274ngc/lexeme.h89
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
51enum 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
70struct cmmm__rs274ngc__lexeme {
71 struct cmmm__string_view sv;
72 enum cmmm__rs274ngc__lexeme__kind kind;
73};
74
75extern 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