From cad6b938b371b8d3ade558627501d7e49c1e5da3 Mon Sep 17 00:00:00 2001 From: Abdelrahman Said Date: Sat, 17 Jun 2023 00:45:00 +0100 Subject: [PATCH] Started implementing the lexer --- .gitignore | 1 + build | 3 + compile | 12 + compile_commands.json | 682 +++++++++++++++++++++++++++++++++++ include/aliases.h | 26 ++ include/lexer/lexer_states.h | 6 + main | Bin 0 -> 24328 bytes src/lexer/lexer_states.c | 154 ++++++++ src/main.c | 3 + 9 files changed, 887 insertions(+) create mode 100644 build create mode 100644 compile create mode 100644 compile_commands.json create mode 100644 include/aliases.h create mode 100644 include/lexer/lexer_states.h create mode 100644 main create mode 100644 src/lexer/lexer_states.c create mode 100644 src/main.c diff --git a/.gitignore b/.gitignore index 0bcc76f..8fed91e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +.cache *.dSYM src/ignore/**/* diff --git a/build b/build new file mode 100644 index 0000000..8e1e5c1 --- /dev/null +++ b/build @@ -0,0 +1,3 @@ +#!/bin/bash + +bear -- ./compile diff --git a/compile b/compile new file mode 100644 index 0000000..7641533 --- /dev/null +++ b/compile @@ -0,0 +1,12 @@ +#!/bin/bash + +CC=clang +CFLAGS="-g -Wall -Werror -pedantic -Iinclude" +SRC="src/main.c" +OUT=main + +# LEXER +CFLAGS+=" -Iinclude/lexer" +SRC+=" src/lexer/*.c" + +$CC $CFLAGS $SRC -o $OUT diff --git a/compile_commands.json b/compile_commands.json new file mode 100644 index 0000000..0e1c4b3 --- /dev/null +++ b/compile_commands.json @@ -0,0 +1,682 @@ +[ + { + "arguments": [ + "/usr/bin/clang", + "-c", + "-g", + "-Wall", + "-Werror", + "-pedantic", + "-Iinclude", + "-Iinclude/lexer", + "-o", + "main", + "src/main.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/main.c", + "output": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/main" + }, + { + "arguments": [ + "/usr/bin/clang", + "-c", + "-g", + "-Wall", + "-Werror", + "-pedantic", + "-Iinclude", + "-Iinclude/lexer", + "-o", + "main", + "src/lexer/array_states.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/array_states.c", + "output": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/main" + }, + { + "arguments": [ + "/usr/bin/clang", + "-c", + "-g", + "-Wall", + "-Werror", + "-pedantic", + "-Iinclude", + "-Iinclude/lexer", + "-o", + "main", + "src/lexer/keyword_states.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/keyword_states.c", + "output": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/main" + }, + { + "arguments": [ + "/usr/bin/clang", + "-c", + "-g", + "-Wall", + "-Werror", + "-pedantic", + "-Iinclude", + "-Iinclude/lexer", + "-o", + "main", + "src/lexer/lexer_states.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/lexer_states.c", + "output": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/main" + }, + { + "arguments": [ + "/usr/bin/clang", + "-c", + "-g", + "-Wall", + "-Werror", + "-pedantic", + "-Iinclude", + "-Iinclude/lexer", + "-o", + "main", + "src/lexer/num_states.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/num_states.c", + "output": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/main" + }, + { + "arguments": [ + "/usr/bin/clang", + "-c", + "-g", + "-Wall", + "-Werror", + "-pedantic", + "-Iinclude", + "-Iinclude/lexer", + "-o", + "main", + "src/lexer/obj_states.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/obj_states.c", + "output": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/main" + }, + { + "arguments": [ + "/usr/bin/clang", + "-c", + "-g", + "-Wall", + "-Werror", + "-pedantic", + "-Iinclude", + "-Iinclude/lexer", + "-o", + "main", + "src/lexer/string_states.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/string_states.c", + "output": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/main" + }, + { + "arguments": [ + "/usr/bin/clang", + "-c", + "-g", + "-Wall", + "-Werror", + "-pedantic", + "-Iinclude", + "-Iinclude/lexer", + "-o", + "main", + "src/lexer/value_states.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/value_states.c", + "output": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/main" + }, + { + "arguments": [ + "/usr/bin/clang-16", + "-cc1", + "-triple", + "x86_64-redhat-linux-gnu", + "-emit-obj", + "-mrelax-all", + "-disable-free", + "-clear-ast-before-backend", + "-disable-llvm-verifier", + "-discard-value-names", + "-main-file-name", + "-mrelocation-model", + "static", + "-mframe-pointer=all", + "-fmath-errno", + "-ffp-contract=on", + "-fno-rounding-math", + "-mconstructor-aliases", + "-funwind-tables=2", + "-target-cpu", + "x86-64", + "-tune-cpu", + "generic", + "-mllvm", + "-treat-scalable-fixed-error-as-warning", + "-debug-info-kind=constructor", + "-dwarf-version=4", + "-debugger-tuning=gdb", + "-fcoverage-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-resource-dir", + "/usr/lib64/clang/16", + "-I", + "include", + "-I", + "include/lexer", + "-internal-isystem", + "/usr/lib64/clang/16/include", + "-internal-isystem", + "/usr/local/include", + "-internal-isystem", + "/usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../x86_64-redhat-linux/include", + "-internal-externc-isystem", + "/include", + "-internal-externc-isystem", + "/usr/include", + "-Wall", + "-Werror", + "-pedantic", + "-fdebug-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-ferror-limit", + "19", + "-fgnuc-version=4.2.1", + "-fcolor-diagnostics", + "-faddrsig", + "-D__GCC_HAVE_DWARF2_CFI_ASM=1", + "-x", + "c", + "-o", + "/tmp/main-3a4e7b.o", + "src/main.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/main.c", + "output": "/tmp/main-3a4e7b.o" + }, + { + "arguments": [ + "/usr/bin/clang-16", + "-cc1", + "-triple", + "x86_64-redhat-linux-gnu", + "-emit-obj", + "-mrelax-all", + "-disable-free", + "-clear-ast-before-backend", + "-disable-llvm-verifier", + "-discard-value-names", + "-main-file-name", + "-mrelocation-model", + "static", + "-mframe-pointer=all", + "-fmath-errno", + "-ffp-contract=on", + "-fno-rounding-math", + "-mconstructor-aliases", + "-funwind-tables=2", + "-target-cpu", + "x86-64", + "-tune-cpu", + "generic", + "-mllvm", + "-treat-scalable-fixed-error-as-warning", + "-debug-info-kind=constructor", + "-dwarf-version=4", + "-debugger-tuning=gdb", + "-fcoverage-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-resource-dir", + "/usr/lib64/clang/16", + "-I", + "include", + "-I", + "include/lexer", + "-internal-isystem", + "/usr/lib64/clang/16/include", + "-internal-isystem", + "/usr/local/include", + "-internal-isystem", + "/usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../x86_64-redhat-linux/include", + "-internal-externc-isystem", + "/include", + "-internal-externc-isystem", + "/usr/include", + "-Wall", + "-Werror", + "-pedantic", + "-fdebug-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-ferror-limit", + "19", + "-fgnuc-version=4.2.1", + "-fcolor-diagnostics", + "-faddrsig", + "-D__GCC_HAVE_DWARF2_CFI_ASM=1", + "-x", + "c", + "-o", + "/tmp/array_states-ba3bba.o", + "src/lexer/array_states.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/array_states.c", + "output": "/tmp/array_states-ba3bba.o" + }, + { + "arguments": [ + "/usr/bin/clang-16", + "-cc1", + "-triple", + "x86_64-redhat-linux-gnu", + "-emit-obj", + "-mrelax-all", + "-disable-free", + "-clear-ast-before-backend", + "-disable-llvm-verifier", + "-discard-value-names", + "-main-file-name", + "-mrelocation-model", + "static", + "-mframe-pointer=all", + "-fmath-errno", + "-ffp-contract=on", + "-fno-rounding-math", + "-mconstructor-aliases", + "-funwind-tables=2", + "-target-cpu", + "x86-64", + "-tune-cpu", + "generic", + "-mllvm", + "-treat-scalable-fixed-error-as-warning", + "-debug-info-kind=constructor", + "-dwarf-version=4", + "-debugger-tuning=gdb", + "-fcoverage-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-resource-dir", + "/usr/lib64/clang/16", + "-I", + "include", + "-I", + "include/lexer", + "-internal-isystem", + "/usr/lib64/clang/16/include", + "-internal-isystem", + "/usr/local/include", + "-internal-isystem", + "/usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../x86_64-redhat-linux/include", + "-internal-externc-isystem", + "/include", + "-internal-externc-isystem", + "/usr/include", + "-Wall", + "-Werror", + "-pedantic", + "-fdebug-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-ferror-limit", + "19", + "-fgnuc-version=4.2.1", + "-fcolor-diagnostics", + "-faddrsig", + "-D__GCC_HAVE_DWARF2_CFI_ASM=1", + "-x", + "c", + "-o", + "/tmp/keyword_states-0752de.o", + "src/lexer/keyword_states.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/keyword_states.c", + "output": "/tmp/keyword_states-0752de.o" + }, + { + "arguments": [ + "/usr/bin/clang-16", + "-cc1", + "-triple", + "x86_64-redhat-linux-gnu", + "-emit-obj", + "-mrelax-all", + "-disable-free", + "-clear-ast-before-backend", + "-disable-llvm-verifier", + "-discard-value-names", + "-main-file-name", + "-mrelocation-model", + "static", + "-mframe-pointer=all", + "-fmath-errno", + "-ffp-contract=on", + "-fno-rounding-math", + "-mconstructor-aliases", + "-funwind-tables=2", + "-target-cpu", + "x86-64", + "-tune-cpu", + "generic", + "-mllvm", + "-treat-scalable-fixed-error-as-warning", + "-debug-info-kind=constructor", + "-dwarf-version=4", + "-debugger-tuning=gdb", + "-fcoverage-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-resource-dir", + "/usr/lib64/clang/16", + "-I", + "include", + "-I", + "include/lexer", + "-internal-isystem", + "/usr/lib64/clang/16/include", + "-internal-isystem", + "/usr/local/include", + "-internal-isystem", + "/usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../x86_64-redhat-linux/include", + "-internal-externc-isystem", + "/include", + "-internal-externc-isystem", + "/usr/include", + "-Wall", + "-Werror", + "-pedantic", + "-fdebug-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-ferror-limit", + "19", + "-fgnuc-version=4.2.1", + "-fcolor-diagnostics", + "-faddrsig", + "-D__GCC_HAVE_DWARF2_CFI_ASM=1", + "-x", + "c", + "-o", + "/tmp/lexer_states-b5dca0.o", + "src/lexer/lexer_states.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/lexer_states.c", + "output": "/tmp/lexer_states-b5dca0.o" + }, + { + "arguments": [ + "/usr/bin/clang-16", + "-cc1", + "-triple", + "x86_64-redhat-linux-gnu", + "-emit-obj", + "-mrelax-all", + "-disable-free", + "-clear-ast-before-backend", + "-disable-llvm-verifier", + "-discard-value-names", + "-main-file-name", + "-mrelocation-model", + "static", + "-mframe-pointer=all", + "-fmath-errno", + "-ffp-contract=on", + "-fno-rounding-math", + "-mconstructor-aliases", + "-funwind-tables=2", + "-target-cpu", + "x86-64", + "-tune-cpu", + "generic", + "-mllvm", + "-treat-scalable-fixed-error-as-warning", + "-debug-info-kind=constructor", + "-dwarf-version=4", + "-debugger-tuning=gdb", + "-fcoverage-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-resource-dir", + "/usr/lib64/clang/16", + "-I", + "include", + "-I", + "include/lexer", + "-internal-isystem", + "/usr/lib64/clang/16/include", + "-internal-isystem", + "/usr/local/include", + "-internal-isystem", + "/usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../x86_64-redhat-linux/include", + "-internal-externc-isystem", + "/include", + "-internal-externc-isystem", + "/usr/include", + "-Wall", + "-Werror", + "-pedantic", + "-fdebug-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-ferror-limit", + "19", + "-fgnuc-version=4.2.1", + "-fcolor-diagnostics", + "-faddrsig", + "-D__GCC_HAVE_DWARF2_CFI_ASM=1", + "-x", + "c", + "-o", + "/tmp/num_states-f8ad26.o", + "src/lexer/num_states.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/num_states.c", + "output": "/tmp/num_states-f8ad26.o" + }, + { + "arguments": [ + "/usr/bin/clang-16", + "-cc1", + "-triple", + "x86_64-redhat-linux-gnu", + "-emit-obj", + "-mrelax-all", + "-disable-free", + "-clear-ast-before-backend", + "-disable-llvm-verifier", + "-discard-value-names", + "-main-file-name", + "-mrelocation-model", + "static", + "-mframe-pointer=all", + "-fmath-errno", + "-ffp-contract=on", + "-fno-rounding-math", + "-mconstructor-aliases", + "-funwind-tables=2", + "-target-cpu", + "x86-64", + "-tune-cpu", + "generic", + "-mllvm", + "-treat-scalable-fixed-error-as-warning", + "-debug-info-kind=constructor", + "-dwarf-version=4", + "-debugger-tuning=gdb", + "-fcoverage-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-resource-dir", + "/usr/lib64/clang/16", + "-I", + "include", + "-I", + "include/lexer", + "-internal-isystem", + "/usr/lib64/clang/16/include", + "-internal-isystem", + "/usr/local/include", + "-internal-isystem", + "/usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../x86_64-redhat-linux/include", + "-internal-externc-isystem", + "/include", + "-internal-externc-isystem", + "/usr/include", + "-Wall", + "-Werror", + "-pedantic", + "-fdebug-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-ferror-limit", + "19", + "-fgnuc-version=4.2.1", + "-fcolor-diagnostics", + "-faddrsig", + "-D__GCC_HAVE_DWARF2_CFI_ASM=1", + "-x", + "c", + "-o", + "/tmp/obj_states-9ef381.o", + "src/lexer/obj_states.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/obj_states.c", + "output": "/tmp/obj_states-9ef381.o" + }, + { + "arguments": [ + "/usr/bin/clang-16", + "-cc1", + "-triple", + "x86_64-redhat-linux-gnu", + "-emit-obj", + "-mrelax-all", + "-disable-free", + "-clear-ast-before-backend", + "-disable-llvm-verifier", + "-discard-value-names", + "-main-file-name", + "-mrelocation-model", + "static", + "-mframe-pointer=all", + "-fmath-errno", + "-ffp-contract=on", + "-fno-rounding-math", + "-mconstructor-aliases", + "-funwind-tables=2", + "-target-cpu", + "x86-64", + "-tune-cpu", + "generic", + "-mllvm", + "-treat-scalable-fixed-error-as-warning", + "-debug-info-kind=constructor", + "-dwarf-version=4", + "-debugger-tuning=gdb", + "-fcoverage-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-resource-dir", + "/usr/lib64/clang/16", + "-I", + "include", + "-I", + "include/lexer", + "-internal-isystem", + "/usr/lib64/clang/16/include", + "-internal-isystem", + "/usr/local/include", + "-internal-isystem", + "/usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../x86_64-redhat-linux/include", + "-internal-externc-isystem", + "/include", + "-internal-externc-isystem", + "/usr/include", + "-Wall", + "-Werror", + "-pedantic", + "-fdebug-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-ferror-limit", + "19", + "-fgnuc-version=4.2.1", + "-fcolor-diagnostics", + "-faddrsig", + "-D__GCC_HAVE_DWARF2_CFI_ASM=1", + "-x", + "c", + "-o", + "/tmp/string_states-c65204.o", + "src/lexer/string_states.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/string_states.c", + "output": "/tmp/string_states-c65204.o" + }, + { + "arguments": [ + "/usr/bin/clang-16", + "-cc1", + "-triple", + "x86_64-redhat-linux-gnu", + "-emit-obj", + "-mrelax-all", + "-disable-free", + "-clear-ast-before-backend", + "-disable-llvm-verifier", + "-discard-value-names", + "-main-file-name", + "-mrelocation-model", + "static", + "-mframe-pointer=all", + "-fmath-errno", + "-ffp-contract=on", + "-fno-rounding-math", + "-mconstructor-aliases", + "-funwind-tables=2", + "-target-cpu", + "x86-64", + "-tune-cpu", + "generic", + "-mllvm", + "-treat-scalable-fixed-error-as-warning", + "-debug-info-kind=constructor", + "-dwarf-version=4", + "-debugger-tuning=gdb", + "-fcoverage-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-resource-dir", + "/usr/lib64/clang/16", + "-I", + "include", + "-I", + "include/lexer", + "-internal-isystem", + "/usr/lib64/clang/16/include", + "-internal-isystem", + "/usr/local/include", + "-internal-isystem", + "/usr/bin/../lib/gcc/x86_64-redhat-linux/13/../../../../x86_64-redhat-linux/include", + "-internal-externc-isystem", + "/include", + "-internal-externc-isystem", + "/usr/include", + "-Wall", + "-Werror", + "-pedantic", + "-fdebug-compilation-dir=/home/abdelrahman/dev_work/say_it_in_json", + "-ferror-limit", + "19", + "-fgnuc-version=4.2.1", + "-fcolor-diagnostics", + "-faddrsig", + "-D__GCC_HAVE_DWARF2_CFI_ASM=1", + "-x", + "c", + "-o", + "/tmp/value_states-016fa1.o", + "src/lexer/value_states.c" + ], + "directory": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json", + "file": "/mnt/3A5CDF785CDF2CFF/Users/abdoo/dev/say_it_in_json/src/lexer/value_states.c", + "output": "/tmp/value_states-016fa1.o" + } +] diff --git a/include/aliases.h b/include/aliases.h new file mode 100644 index 0000000..d7e7807 --- /dev/null +++ b/include/aliases.h @@ -0,0 +1,26 @@ +#ifndef ALIASES_H +#define ALIASES_H + +#include + +#define u8 uint8_t +#define u16 uint16_t +#define u32 uint32_t +#define u64 uint64_t + +#define i8 int8_t +#define i16 int16_t +#define i32 int32_t +#define i64 int64_t + +#define f32 float +#define f64 double + +#define INTERNAL static +#define PERSISTENT static + +#ifdef __cplusplus +#define CLASS_MEMBER static +#endif // __cplusplus + +#endif // !ALIASES_H diff --git a/include/lexer/lexer_states.h b/include/lexer/lexer_states.h new file mode 100644 index 0000000..8da7e5b --- /dev/null +++ b/include/lexer/lexer_states.h @@ -0,0 +1,6 @@ +#ifndef LEXER_STATES_H +#define LEXER_STATES_H + +typedef struct lexer lexer_t; + +#endif // !LEXER_STATES_H diff --git a/main b/main new file mode 100644 index 0000000000000000000000000000000000000000..6eb31c6100f401dc5856390f2bb541b26bc05c6f GIT binary patch literal 24328 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 RR4e_8f2_7R7*U9@;$IK{h?oEX literal 0 HcmV?d00001 diff --git a/src/lexer/lexer_states.c b/src/lexer/lexer_states.c new file mode 100644 index 0000000..98e1224 --- /dev/null +++ b/src/lexer/lexer_states.c @@ -0,0 +1,154 @@ +#include "lexer_states.h" +#include "aliases.h" +#include + +// clang-format off +typedef enum { + // GENERAL STATES + LEXER_STATE_START, + LEXER_STATE_SUCCESS, + LEXER_STATE_ERROR, + LEXER_STATE_VALUE, + LEXER_STATE_KEYWORD, + // COLLECTION STATES + LEXER_STATE_OBJECT, + LEXER_STATE_ARRAY, + // OBJECT STATES + LEXER_STATE_KEY_START, + LEXER_STATE_KEY_END, + // NUMBER STATES + LEXER_STATE_NUMBER_START, + LEXER_STATE_DECIMAL, + LEXER_STATE_NUMBER, + LEXER_STATE_FRACTION, + LEXER_STATE_EXPONENT, + LEXER_STATE_EXP_SIGN, + LEXER_STATE_POWER, + LEXER_STATE_NUMBER_END, + // STRING STATES + LEXER_STATE_STRING, + LEXER_STATE_ESCAPE_SEQUENCE, + LEXER_STATE_UNICODE_HEX, + + COUNT_LEXER_STATES, +} lexer_state_t; +// clang-format on + +struct lexer { + lexer_state_t current; + u64 line; + u64 column; +}; + +void lexer_state_machine(lexer_t *lexer, char input); +lexer_state_t handle_lexer_start(char input); +lexer_state_t handle_object(char input); +lexer_state_t handle_character(char input); +lexer_state_t handle_escape_sequence(char input); + +void lexer_state_machine(lexer_t *lexer, char input) { + switch (lexer->current) { + case LEXER_STATE_START: + lexer->current = handle_lexer_start(input); + break; + case LEXER_STATE_SUCCESS: + break; + case LEXER_STATE_ERROR: + break; + case LEXER_STATE_VALUE: + break; + case LEXER_STATE_KEYWORD: + break; + case LEXER_STATE_OBJECT: + lexer->current = handle_object(input); + break; + case LEXER_STATE_ARRAY: + lexer->current = LEXER_STATE_VALUE; + break; + case LEXER_STATE_KEY_START: + lexer->current = LEXER_STATE_STRING; + break; + case LEXER_STATE_KEY_END: + break; + case LEXER_STATE_NUMBER_START: + break; + case LEXER_STATE_DECIMAL: + break; + case LEXER_STATE_NUMBER: + break; + case LEXER_STATE_FRACTION: + break; + case LEXER_STATE_EXPONENT: + break; + case LEXER_STATE_EXP_SIGN: + break; + case LEXER_STATE_POWER: + break; + case LEXER_STATE_NUMBER_END: + break; + case LEXER_STATE_STRING: + lexer->current = handle_character(input); + break; + case LEXER_STATE_ESCAPE_SEQUENCE: + lexer->current = handle_escape_sequence(input); + break; + case LEXER_STATE_UNICODE_HEX: + break; + default: + lexer->current = LEXER_STATE_ERROR; + } +} + +lexer_state_t handle_lexer_start(char input) { + if (isspace(input)) { + return LEXER_STATE_START; + } + + switch (input) { + case '{': + return LEXER_STATE_OBJECT; + case '[': + return LEXER_STATE_ARRAY; + } + + return LEXER_STATE_ERROR; +} + +lexer_state_t handle_object(char input) { + if (isspace(input)) { + return LEXER_STATE_OBJECT; + } else if (input == '"') { + return LEXER_STATE_KEY_START; + } + + return LEXER_STATE_ERROR; +} + +lexer_state_t handle_character(char input) { + switch (input) { + case '\\': + return LEXER_STATE_ESCAPE_SEQUENCE; + case '"': + return LEXER_STATE_STRING; // WHAT TO RETURN HERE? + } + + return LEXER_STATE_STRING; +} + +lexer_state_t handle_escape_sequence(char input) { + switch (input) { + case '"': + case '/': + case '\\': + case 'b': + case 'f': + case 'n': + case 'r': + case 't': + return LEXER_STATE_STRING; + case 'u': + return LEXER_STATE_UNICODE_HEX; + } + + return LEXER_STATE_ERROR; +} diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..f9785f8 --- /dev/null +++ b/src/main.c @@ -0,0 +1,3 @@ +#include + +int main(int argc, char *argv[]) { return EXIT_SUCCESS; }