HOME
|
GIT
|
CV
|
MUSINGS
LOG
|
FILES
|
OVERVIEW
F diff --git a/.gitignore b/.gitignore
--- a/.gitignore
+++ b/.gitignore
wonky
- *.o
+ CMakeFiles
+ CMakeCache.txt
+ cmake_install.cmake
F diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
--- /dev/null
+++ b/CMakeLists.txt
+ cmake_minimum_required (VERSION 3.13.4)
+ project (IOPL)
+
+
+ include_directories(misc)
+ include_directories(parse)
+ include_directories(semantics)
+ include_directories(lex)
+
+ set(SOURCES main.c
+ parse/parse_declaration.c
+ parse/parse_expression.c
+ parse/parse_statement.c
+ parse/parse_translation_unit.c
+ misc/map.c
+ misc/queue.c
+ misc/stack.c
+ misc/print.c
+ lex/chonky.c
+ lex/chonky_jr.c
+ lex/lexer.c
+ lex/preprocessing.c
+ semantics/ast.c
+ semantics/location.c
+ semantics/denoted.c
+ semantics/type.c
+ semantics/program.c
+ semantics/scope.c
+ semantics/semantics.c
+ )
+
+ add_executable(wonky ${SOURCES})
F diff --git a/Makefile b/Makefile
new file mode 100644
--- /dev/null
+++ b/Makefile
+ # CMAKE generated file: DO NOT EDIT!
+ # Generated by "Unix Makefiles" Generator, CMake Version 3.13
+
+ # Default target executed when no arguments are given to make.
+ default_target: all
+
+ .PHONY : default_target
+
+ # Allow only one "make -f Makefile2" at a time, but pass parallelism.
+ .NOTPARALLEL:
+
+
+ #=============================================================================
+ # Special targets provided by cmake.
+
+ # Disable implicit rules so canonical targets will work.
+ .SUFFIXES:
+
+
+ # Remove some rules from gmake that .SUFFIXES does not remove.
+ SUFFIXES =
+
+ .SUFFIXES: .hpux_make_needs_suffix_list
+
+
+ # Suppress display of executed commands.
+ $(VERBOSE).SILENT:
+
+
+ # A target that is always out of date.
+ cmake_force:
+
+ .PHONY : cmake_force
+
+ #=============================================================================
+ # Set environment variables for the build.
+
+ # The shell in which to execute make rules.
+ SHELL = /bin/sh
+
+ # The CMake executable.
+ CMAKE_COMMAND = /usr/bin/cmake
+
+ # The command to remove a file.
+ RM = /usr/bin/cmake -E remove -f
+
+ # Escaping for special characters.
+ EQUALS = =
+
+ # The top-level source directory on which CMake was run.
+ CMAKE_SOURCE_DIR = /home/adam/code/IOPL/C
+
+ # The top-level build directory on which CMake was run.
+ CMAKE_BINARY_DIR = /home/adam/code/IOPL/C
+
+ #=============================================================================
+ # Targets provided globally by CMake.
+
+ # Special rule for the target rebuild_cache
+ rebuild_cache:
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
+ /usr/bin/cmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
+ .PHONY : rebuild_cache
+
+ # Special rule for the target rebuild_cache
+ rebuild_cache/fast: rebuild_cache
+
+ .PHONY : rebuild_cache/fast
+
+ # Special rule for the target edit_cache
+ edit_cache:
+ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "No interactive CMake dialog available..."
+ /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available.
+ .PHONY : edit_cache
+
+ # Special rule for the target edit_cache
+ edit_cache/fast: edit_cache
+
+ .PHONY : edit_cache/fast
+
+ # The main all target
+ all: cmake_check_build_system
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/adam/code/IOPL/C/CMakeFiles /home/adam/code/IOPL/C/CMakeFiles/progress.marks
+ $(MAKE) -f CMakeFiles/Makefile2 all
+ $(CMAKE_COMMAND) -E cmake_progress_start /home/adam/code/IOPL/C/CMakeFiles 0
+ .PHONY : all
+
+ # The main clean target
+ clean:
+ $(MAKE) -f CMakeFiles/Makefile2 clean
+ .PHONY : clean
+
+ # The main clean target
+ clean/fast: clean
+
+ .PHONY : clean/fast
+
+ # Prepare targets for installation.
+ preinstall: all
+ $(MAKE) -f CMakeFiles/Makefile2 preinstall
+ .PHONY : preinstall
+
+ # Prepare targets for installation.
+ preinstall/fast:
+ $(MAKE) -f CMakeFiles/Makefile2 preinstall
+ .PHONY : preinstall/fast
+
+ # clear depends
+ depend:
+ $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
+ .PHONY : depend
+
+ #=============================================================================
+ # Target rules for targets named wonky
+
+ # Build rule for target.
+ wonky: cmake_check_build_system
+ $(MAKE) -f CMakeFiles/Makefile2 wonky
+ .PHONY : wonky
+
+ # fast build rule for target.
+ wonky/fast:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/build
+ .PHONY : wonky/fast
+
+ lex/chonky.o: lex/chonky.c.o
+
+ .PHONY : lex/chonky.o
+
+ # target to build an object file
+ lex/chonky.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/lex/chonky.c.o
+ .PHONY : lex/chonky.c.o
+
+ lex/chonky.i: lex/chonky.c.i
+
+ .PHONY : lex/chonky.i
+
+ # target to preprocess a source file
+ lex/chonky.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/lex/chonky.c.i
+ .PHONY : lex/chonky.c.i
+
+ lex/chonky.s: lex/chonky.c.s
+
+ .PHONY : lex/chonky.s
+
+ # target to generate assembly for a file
+ lex/chonky.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/lex/chonky.c.s
+ .PHONY : lex/chonky.c.s
+
+ lex/chonky_jr.o: lex/chonky_jr.c.o
+
+ .PHONY : lex/chonky_jr.o
+
+ # target to build an object file
+ lex/chonky_jr.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/lex/chonky_jr.c.o
+ .PHONY : lex/chonky_jr.c.o
+
+ lex/chonky_jr.i: lex/chonky_jr.c.i
+
+ .PHONY : lex/chonky_jr.i
+
+ # target to preprocess a source file
+ lex/chonky_jr.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/lex/chonky_jr.c.i
+ .PHONY : lex/chonky_jr.c.i
+
+ lex/chonky_jr.s: lex/chonky_jr.c.s
+
+ .PHONY : lex/chonky_jr.s
+
+ # target to generate assembly for a file
+ lex/chonky_jr.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/lex/chonky_jr.c.s
+ .PHONY : lex/chonky_jr.c.s
+
+ lex/lexer.o: lex/lexer.c.o
+
+ .PHONY : lex/lexer.o
+
+ # target to build an object file
+ lex/lexer.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/lex/lexer.c.o
+ .PHONY : lex/lexer.c.o
+
+ lex/lexer.i: lex/lexer.c.i
+
+ .PHONY : lex/lexer.i
+
+ # target to preprocess a source file
+ lex/lexer.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/lex/lexer.c.i
+ .PHONY : lex/lexer.c.i
+
+ lex/lexer.s: lex/lexer.c.s
+
+ .PHONY : lex/lexer.s
+
+ # target to generate assembly for a file
+ lex/lexer.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/lex/lexer.c.s
+ .PHONY : lex/lexer.c.s
+
+ lex/preprocessing.o: lex/preprocessing.c.o
+
+ .PHONY : lex/preprocessing.o
+
+ # target to build an object file
+ lex/preprocessing.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/lex/preprocessing.c.o
+ .PHONY : lex/preprocessing.c.o
+
+ lex/preprocessing.i: lex/preprocessing.c.i
+
+ .PHONY : lex/preprocessing.i
+
+ # target to preprocess a source file
+ lex/preprocessing.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/lex/preprocessing.c.i
+ .PHONY : lex/preprocessing.c.i
+
+ lex/preprocessing.s: lex/preprocessing.c.s
+
+ .PHONY : lex/preprocessing.s
+
+ # target to generate assembly for a file
+ lex/preprocessing.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/lex/preprocessing.c.s
+ .PHONY : lex/preprocessing.c.s
+
+ main.o: main.c.o
+
+ .PHONY : main.o
+
+ # target to build an object file
+ main.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/main.c.o
+ .PHONY : main.c.o
+
+ main.i: main.c.i
+
+ .PHONY : main.i
+
+ # target to preprocess a source file
+ main.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/main.c.i
+ .PHONY : main.c.i
+
+ main.s: main.c.s
+
+ .PHONY : main.s
+
+ # target to generate assembly for a file
+ main.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/main.c.s
+ .PHONY : main.c.s
+
+ misc/map.o: misc/map.c.o
+
+ .PHONY : misc/map.o
+
+ # target to build an object file
+ misc/map.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/misc/map.c.o
+ .PHONY : misc/map.c.o
+
+ misc/map.i: misc/map.c.i
+
+ .PHONY : misc/map.i
+
+ # target to preprocess a source file
+ misc/map.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/misc/map.c.i
+ .PHONY : misc/map.c.i
+
+ misc/map.s: misc/map.c.s
+
+ .PHONY : misc/map.s
+
+ # target to generate assembly for a file
+ misc/map.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/misc/map.c.s
+ .PHONY : misc/map.c.s
+
+ misc/print.o: misc/print.c.o
+
+ .PHONY : misc/print.o
+
+ # target to build an object file
+ misc/print.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/misc/print.c.o
+ .PHONY : misc/print.c.o
+
+ misc/print.i: misc/print.c.i
+
+ .PHONY : misc/print.i
+
+ # target to preprocess a source file
+ misc/print.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/misc/print.c.i
+ .PHONY : misc/print.c.i
+
+ misc/print.s: misc/print.c.s
+
+ .PHONY : misc/print.s
+
+ # target to generate assembly for a file
+ misc/print.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/misc/print.c.s
+ .PHONY : misc/print.c.s
+
+ misc/queue.o: misc/queue.c.o
+
+ .PHONY : misc/queue.o
+
+ # target to build an object file
+ misc/queue.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/misc/queue.c.o
+ .PHONY : misc/queue.c.o
+
+ misc/queue.i: misc/queue.c.i
+
+ .PHONY : misc/queue.i
+
+ # target to preprocess a source file
+ misc/queue.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/misc/queue.c.i
+ .PHONY : misc/queue.c.i
+
+ misc/queue.s: misc/queue.c.s
+
+ .PHONY : misc/queue.s
+
+ # target to generate assembly for a file
+ misc/queue.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/misc/queue.c.s
+ .PHONY : misc/queue.c.s
+
+ misc/stack.o: misc/stack.c.o
+
+ .PHONY : misc/stack.o
+
+ # target to build an object file
+ misc/stack.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/misc/stack.c.o
+ .PHONY : misc/stack.c.o
+
+ misc/stack.i: misc/stack.c.i
+
+ .PHONY : misc/stack.i
+
+ # target to preprocess a source file
+ misc/stack.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/misc/stack.c.i
+ .PHONY : misc/stack.c.i
+
+ misc/stack.s: misc/stack.c.s
+
+ .PHONY : misc/stack.s
+
+ # target to generate assembly for a file
+ misc/stack.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/misc/stack.c.s
+ .PHONY : misc/stack.c.s
+
+ parse/parse_declaration.o: parse/parse_declaration.c.o
+
+ .PHONY : parse/parse_declaration.o
+
+ # target to build an object file
+ parse/parse_declaration.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/parse/parse_declaration.c.o
+ .PHONY : parse/parse_declaration.c.o
+
+ parse/parse_declaration.i: parse/parse_declaration.c.i
+
+ .PHONY : parse/parse_declaration.i
+
+ # target to preprocess a source file
+ parse/parse_declaration.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/parse/parse_declaration.c.i
+ .PHONY : parse/parse_declaration.c.i
+
+ parse/parse_declaration.s: parse/parse_declaration.c.s
+
+ .PHONY : parse/parse_declaration.s
+
+ # target to generate assembly for a file
+ parse/parse_declaration.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/parse/parse_declaration.c.s
+ .PHONY : parse/parse_declaration.c.s
+
+ parse/parse_expression.o: parse/parse_expression.c.o
+
+ .PHONY : parse/parse_expression.o
+
+ # target to build an object file
+ parse/parse_expression.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/parse/parse_expression.c.o
+ .PHONY : parse/parse_expression.c.o
+
+ parse/parse_expression.i: parse/parse_expression.c.i
+
+ .PHONY : parse/parse_expression.i
+
+ # target to preprocess a source file
+ parse/parse_expression.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/parse/parse_expression.c.i
+ .PHONY : parse/parse_expression.c.i
+
+ parse/parse_expression.s: parse/parse_expression.c.s
+
+ .PHONY : parse/parse_expression.s
+
+ # target to generate assembly for a file
+ parse/parse_expression.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/parse/parse_expression.c.s
+ .PHONY : parse/parse_expression.c.s
+
+ parse/parse_statement.o: parse/parse_statement.c.o
+
+ .PHONY : parse/parse_statement.o
+
+ # target to build an object file
+ parse/parse_statement.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/parse/parse_statement.c.o
+ .PHONY : parse/parse_statement.c.o
+
+ parse/parse_statement.i: parse/parse_statement.c.i
+
+ .PHONY : parse/parse_statement.i
+
+ # target to preprocess a source file
+ parse/parse_statement.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/parse/parse_statement.c.i
+ .PHONY : parse/parse_statement.c.i
+
+ parse/parse_statement.s: parse/parse_statement.c.s
+
+ .PHONY : parse/parse_statement.s
+
+ # target to generate assembly for a file
+ parse/parse_statement.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/parse/parse_statement.c.s
+ .PHONY : parse/parse_statement.c.s
+
+ parse/parse_translation_unit.o: parse/parse_translation_unit.c.o
+
+ .PHONY : parse/parse_translation_unit.o
+
+ # target to build an object file
+ parse/parse_translation_unit.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/parse/parse_translation_unit.c.o
+ .PHONY : parse/parse_translation_unit.c.o
+
+ parse/parse_translation_unit.i: parse/parse_translation_unit.c.i
+
+ .PHONY : parse/parse_translation_unit.i
+
+ # target to preprocess a source file
+ parse/parse_translation_unit.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/parse/parse_translation_unit.c.i
+ .PHONY : parse/parse_translation_unit.c.i
+
+ parse/parse_translation_unit.s: parse/parse_translation_unit.c.s
+
+ .PHONY : parse/parse_translation_unit.s
+
+ # target to generate assembly for a file
+ parse/parse_translation_unit.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/parse/parse_translation_unit.c.s
+ .PHONY : parse/parse_translation_unit.c.s
+
+ semantics/ast.o: semantics/ast.c.o
+
+ .PHONY : semantics/ast.o
+
+ # target to build an object file
+ semantics/ast.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/ast.c.o
+ .PHONY : semantics/ast.c.o
+
+ semantics/ast.i: semantics/ast.c.i
+
+ .PHONY : semantics/ast.i
+
+ # target to preprocess a source file
+ semantics/ast.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/ast.c.i
+ .PHONY : semantics/ast.c.i
+
+ semantics/ast.s: semantics/ast.c.s
+
+ .PHONY : semantics/ast.s
+
+ # target to generate assembly for a file
+ semantics/ast.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/ast.c.s
+ .PHONY : semantics/ast.c.s
+
+ semantics/denoted.o: semantics/denoted.c.o
+
+ .PHONY : semantics/denoted.o
+
+ # target to build an object file
+ semantics/denoted.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/denoted.c.o
+ .PHONY : semantics/denoted.c.o
+
+ semantics/denoted.i: semantics/denoted.c.i
+
+ .PHONY : semantics/denoted.i
+
+ # target to preprocess a source file
+ semantics/denoted.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/denoted.c.i
+ .PHONY : semantics/denoted.c.i
+
+ semantics/denoted.s: semantics/denoted.c.s
+
+ .PHONY : semantics/denoted.s
+
+ # target to generate assembly for a file
+ semantics/denoted.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/denoted.c.s
+ .PHONY : semantics/denoted.c.s
+
+ semantics/location.o: semantics/location.c.o
+
+ .PHONY : semantics/location.o
+
+ # target to build an object file
+ semantics/location.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/location.c.o
+ .PHONY : semantics/location.c.o
+
+ semantics/location.i: semantics/location.c.i
+
+ .PHONY : semantics/location.i
+
+ # target to preprocess a source file
+ semantics/location.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/location.c.i
+ .PHONY : semantics/location.c.i
+
+ semantics/location.s: semantics/location.c.s
+
+ .PHONY : semantics/location.s
+
+ # target to generate assembly for a file
+ semantics/location.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/location.c.s
+ .PHONY : semantics/location.c.s
+
+ semantics/program.o: semantics/program.c.o
+
+ .PHONY : semantics/program.o
+
+ # target to build an object file
+ semantics/program.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/program.c.o
+ .PHONY : semantics/program.c.o
+
+ semantics/program.i: semantics/program.c.i
+
+ .PHONY : semantics/program.i
+
+ # target to preprocess a source file
+ semantics/program.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/program.c.i
+ .PHONY : semantics/program.c.i
+
+ semantics/program.s: semantics/program.c.s
+
+ .PHONY : semantics/program.s
+
+ # target to generate assembly for a file
+ semantics/program.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/program.c.s
+ .PHONY : semantics/program.c.s
+
+ semantics/scope.o: semantics/scope.c.o
+
+ .PHONY : semantics/scope.o
+
+ # target to build an object file
+ semantics/scope.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/scope.c.o
+ .PHONY : semantics/scope.c.o
+
+ semantics/scope.i: semantics/scope.c.i
+
+ .PHONY : semantics/scope.i
+
+ # target to preprocess a source file
+ semantics/scope.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/scope.c.i
+ .PHONY : semantics/scope.c.i
+
+ semantics/scope.s: semantics/scope.c.s
+
+ .PHONY : semantics/scope.s
+
+ # target to generate assembly for a file
+ semantics/scope.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/scope.c.s
+ .PHONY : semantics/scope.c.s
+
+ semantics/semantics.o: semantics/semantics.c.o
+
+ .PHONY : semantics/semantics.o
+
+ # target to build an object file
+ semantics/semantics.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/semantics.c.o
+ .PHONY : semantics/semantics.c.o
+
+ semantics/semantics.i: semantics/semantics.c.i
+
+ .PHONY : semantics/semantics.i
+
+ # target to preprocess a source file
+ semantics/semantics.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/semantics.c.i
+ .PHONY : semantics/semantics.c.i
+
+ semantics/semantics.s: semantics/semantics.c.s
+
+ .PHONY : semantics/semantics.s
+
+ # target to generate assembly for a file
+ semantics/semantics.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/semantics.c.s
+ .PHONY : semantics/semantics.c.s
+
+ semantics/type.o: semantics/type.c.o
+
+ .PHONY : semantics/type.o
+
+ # target to build an object file
+ semantics/type.c.o:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/type.c.o
+ .PHONY : semantics/type.c.o
+
+ semantics/type.i: semantics/type.c.i
+
+ .PHONY : semantics/type.i
+
+ # target to preprocess a source file
+ semantics/type.c.i:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/type.c.i
+ .PHONY : semantics/type.c.i
+
+ semantics/type.s: semantics/type.c.s
+
+ .PHONY : semantics/type.s
+
+ # target to generate assembly for a file
+ semantics/type.c.s:
+ $(MAKE) -f CMakeFiles/wonky.dir/build.make CMakeFiles/wonky.dir/semantics/type.c.s
+ .PHONY : semantics/type.c.s
+
+ # Help Target
+ help:
+ @echo "The following are some of the valid targets for this Makefile:"
+ @echo "... all (the default if no target is provided)"
+ @echo "... clean"
+ @echo "... depend"
+ @echo "... rebuild_cache"
+ @echo "... wonky"
+ @echo "... edit_cache"
+ @echo "... lex/chonky.o"
+ @echo "... lex/chonky.i"
+ @echo "... lex/chonky.s"
+ @echo "... lex/chonky_jr.o"
+ @echo "... lex/chonky_jr.i"
+ @echo "... lex/chonky_jr.s"
+ @echo "... lex/lexer.o"
+ @echo "... lex/lexer.i"
+ @echo "... lex/lexer.s"
+ @echo "... lex/preprocessing.o"
+ @echo "... lex/preprocessing.i"
+ @echo "... lex/preprocessing.s"
+ @echo "... main.o"
+ @echo "... main.i"
+ @echo "... main.s"
+ @echo "... misc/map.o"
+ @echo "... misc/map.i"
+ @echo "... misc/map.s"
+ @echo "... misc/print.o"
+ @echo "... misc/print.i"
+ @echo "... misc/print.s"
+ @echo "... misc/queue.o"
+ @echo "... misc/queue.i"
+ @echo "... misc/queue.s"
+ @echo "... misc/stack.o"
+ @echo "... misc/stack.i"
+ @echo "... misc/stack.s"
+ @echo "... parse/parse_declaration.o"
+ @echo "... parse/parse_declaration.i"
+ @echo "... parse/parse_declaration.s"
+ @echo "... parse/parse_expression.o"
+ @echo "... parse/parse_expression.i"
+ @echo "... parse/parse_expression.s"
+ @echo "... parse/parse_statement.o"
+ @echo "... parse/parse_statement.i"
+ @echo "... parse/parse_statement.s"
+ @echo "... parse/parse_translation_unit.o"
+ @echo "... parse/parse_translation_unit.i"
+ @echo "... parse/parse_translation_unit.s"
+ @echo "... semantics/ast.o"
+ @echo "... semantics/ast.i"
+ @echo "... semantics/ast.s"
+ @echo "... semantics/denoted.o"
+ @echo "... semantics/denoted.i"
+ @echo "... semantics/denoted.s"
+ @echo "... semantics/location.o"
+ @echo "... semantics/location.i"
+ @echo "... semantics/location.s"
+ @echo "... semantics/program.o"
+ @echo "... semantics/program.i"
+ @echo "... semantics/program.s"
+ @echo "... semantics/scope.o"
+ @echo "... semantics/scope.i"
+ @echo "... semantics/scope.s"
+ @echo "... semantics/semantics.o"
+ @echo "... semantics/semantics.i"
+ @echo "... semantics/semantics.s"
+ @echo "... semantics/type.o"
+ @echo "... semantics/type.i"
+ @echo "... semantics/type.s"
+ .PHONY : help
+
+
+
+ #=============================================================================
+ # Special targets to cleanup operation of make.
+
+ # Special rule to run CMake to check the build system integrity.
+ # No rule that depends on this can have commands that come from listfiles
+ # because they might be regenerated.
+ cmake_check_build_system:
+ $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
+ .PHONY : cmake_check_build_system
+
F diff --git a/all.h b/all.h
deleted file mode 100644
--- a/all.h
+++ /dev/null
- #ifndef GCC_ALL
- #define GCC_ALL GCC_ALL
-
-
-
- #include "ast.h"
- #include "denoted.h"
- #include "lexer.h"
- #include "location.h"
- #include "parse_declaration.h"
- #include "parse_expression.h"
- #include "parse_statement.h"
- #include "parse_translation_unit.h"
- #include "preprocessing.h"
- #include "program.h"
- #include "scope.h"
- #include "semantics.h"
- #include "type.h"
-
- #include "queue.h"
- #include "map.h"
- #include "stack.h"
-
- #include "print.h"
-
-
- #endif
F diff --git a/ast.c b/ast.c
deleted file mode 100644
--- a/ast.c
+++ /dev/null
- #ifndef GCC_AST_C
- #define GCC_AST_C GCC_AST_C
- #include "ast.h"
-
- struct AST_Error* get_error_tree(struct AST *error)
- {
- struct AST_Error *ret;
- ret=malloc(sizeof(struct AST_Error));
- ret->type=ERROR;
- ret->error=error;
- return ret;
- }
- struct AST_Declaration_Error* get_declaration_error_tree(struct Denoted *error)
- {
-
- struct AST_Declaration_Error *ret;
- ret=malloc(sizeof(struct AST_Declaration_Error));
- ret->type=ERROR_DECLARATION;
- ret->error=error;
- return ret;
- }
-
- struct AST_Binary_Expression* get_binary_expression_tree(struct AST *left,struct AST *right,enum AST_Type type)
- {
- struct AST_Binary_Expression *ret;
- ret=malloc(sizeof(struct AST_Binary_Expression));
- ret->type=type;
- ret->left=left;
- ret->right=right;
-
- return ret;
- }
- struct AST_Conditional_Expression* get_conditional_expression_tree(struct AST *left,struct AST *center,struct AST *right)
- {
- struct AST_Conditional_Expression *ret;
- ret=malloc(sizeof(struct AST_Conditional_Expression));
- ret->type=OP_COND;
- ret->left=left;
- ret->center=center;
- ret->right=right;
- return ret;
- }
-
- struct AST_Function_Expression* get_function_expression_tree(struct AST* id,struct Scope *scope)
- {
- struct AST_Function_Expression *ret;
- ret=malloc(sizeof(struct AST_Function_Expression));
- ret->type=OP_FUNCTION;
- ret->id=id;
- Queue_Init(&ret->arguments);
- return ret;
- }
- struct AST_Unary_Expression* get_unary_expression_tree(struct AST *operand,enum AST_Type type)
- {
-
- struct AST_Unary_Expression *ret;
- ret=malloc(sizeof(struct AST_Unary_Expression));
- ret->operand=operand;
- ret->type=type;
-
- return ret;
- }
- struct AST_Rvalue_Expression* get_rvalue_expression_tree(struct token *id)
- {
- struct AST_Rvalue_Expression *ret;
- ret=malloc(sizeof(struct AST_Rvalue_Expression));
- ret->type=OP_RVALUE;
- ret->id=id;
- return ret;
- }
- struct AST_Lvalue_Expression* get_lvalue_expression_tree(struct token *id,struct Scope* scope)
- {
- struct AST_Lvalue_Expression *ret;
- ret=malloc(sizeof(struct AST_Lvalue_Expression));
- ret->type=OP_LVALUE;
- ret->id=id;
- ret->value_type=check_ordinary(scope,id);
- if(ret->value_type==NULL)
- {
- /*TODO error*/
- }
- return ret;
- }
-
-
-
-
-
- struct AST_Labeled_Statement* get_labeled_statement_tree(struct token *label,struct AST* statement,struct Scope *scope,enum AST_Type type)
- {
- struct AST_Labeled_Statement *ret;
- ret=malloc(sizeof(struct AST_Labeled_Statement));
- ret->type=type;
- ret->label=label;
- ret->statement=statement;
- ret->scope=scope;
-
- return ret;
- }
- struct AST_Compound_Statement* get_compound_statement_tree(struct Scope *parent_scope)
- {
- struct AST_Compound_Statement *ret;
- ret=malloc(sizeof(struct AST_Compound_Statement));
- ret->type=ST_COMPOUND;
- Queue_Init(&ret->components);
- ret->scope=get_scope(parent_scope);
- return ret;
- }
- struct AST_If_Statement* get_if_statement_tree()
- {
- struct AST_If_Statement *ret;
- ret=malloc(sizeof(struct AST_If_Statement));
- ret->type=ST_IF;
-
- return ret;
- }
- struct AST_Switch_Statement* get_switch_statement_tree()
- {
- struct AST_Switch_Statement *ret;
- ret=malloc(sizeof(struct AST_Switch_Statement));
- ret->type=ST_SWITCH;
- return ret;
- }
- struct AST_While_Statement* get_while_statement_tree()
- {
- struct AST_While_Statement *ret;
- ret=malloc(sizeof(struct AST_While_Statement));
- ret->type=ST_WHILE;
- return ret;
- }
- struct AST_Do_While_Statement* get_do_while_statement_tree()
- {
- struct AST_Do_While_Statement *ret;
- ret=malloc(sizeof(struct AST_Do_While_Statement));
- ret->type=ST_DO_WHILE;
- return ret;
- }
-
- struct AST_For_Statement* get_for_statement_tree()
- {
- struct AST_For_Statement *ret;
- ret=malloc(sizeof(struct AST_For_Statement));
- ret->type=ST_FOR;
- return ret;
- }
- struct AST_Return_Statement* get_return_statement_tree(struct AST* return_expression)
- {
- struct AST_Return_Statement *ret;
- ret=malloc(sizeof(struct AST_If_Statement));
- ret->type=ST_RETURN;
- ret->return_expression=return_expression;
- return ret;
- }
-
- struct AST_Goto_Statement* get_goto_statement_tree(struct token *label,struct Scope *scope)
- {
- struct AST_Goto_Statement *ret;
- ret=malloc(sizeof(struct AST_Goto_Statement));
- ret->type=ST_GOTO;
- ret->label=label;
- return ret;
- }
-
-
- struct AST* get_nop_tree()
- {
- struct AST* ret;
- ret=malloc(sizeof(struct AST*));
- ret->type=OP_NOP;
- return ret;
- }
-
-
-
- struct AST_Type_Definition* get_type_definition_tree(struct Denoted_Typedef *definition,struct Scope *scope)
- {
- struct AST_Type_Definition *ret;
- ret=malloc(sizeof(struct AST_Type_Definition));
- ret->type=ST_TYPE_DEFINITION;
- ret->definition=definition;
- ret->scope=scope;
-
- return ret;
-
- }
- struct AST_Object_Declaration* get_object_declaration_tree(struct Denoted_Object *object,struct AST *initializer,struct Scope *scope)
- {
- struct AST_Object_Declaration *ret;
- ret=malloc(sizeof(struct AST_Object_Declaration));
- ret->type=ST_OBJECT_DECLARATION;
- ret->object=object;
- ret->scope=scope;
- ret->initializer=initializer;
-
- return ret;
- }
-
- struct AST_Function_Definition* get_function_definition_tree(struct Scope *scope,struct Denoted_Function *function)
- {
- struct AST_Function_Definition *ret;
- ret=malloc(sizeof(struct AST_Function_Definition));
- ret->type=ST_FUNCTION_DEFINITION;
- ret->function=function;
- ret->scope=scope;
- return ret;
- }
-
- struct AST_Function_Declaration* get_function_declaration_tree(struct Scope *scope,struct Denoted_Function *function)
- {
- struct AST_Function_Declaration *ret;
- ret=malloc(sizeof(struct AST_Function_Declaration));
- ret->type=ST_FUNCTION_DECLARATION;
- ret->function=function;
- ret->scope=scope;
- return ret;
- }
- struct AST_Translation_Unit* get_translation_unit_tree(struct Scope* parent_scope)
- {
- struct AST_Translation_Unit *ret;
- ret=malloc(sizeof(struct AST_Translation_Unit));
- ret->type=TRANSLATION_UNIT;
- Queue_Init(&ret->components);
- /*TODO*/
- //ret->scope=get_scope(parent_scope);
- ret->scope=parent_scope;
- return ret;
- }
-
-
-
-
-
-
-
-
- #endif
F diff --git a/ast.h b/ast.h
deleted file mode 100644
--- a/ast.h
+++ /dev/null
- #ifndef GCC_AST_H
- #define GCC_AST_H GCC_AST_H
- #include "ast.hh"
- #include "scope.h"
- #include "parse_declaration.h"
- #include "denoted.h"
-
-
-
- enum AST_Type;
-
-
-
- /*
- struct AST
- {
- enum AST_Type type;
-
- unsigned long value_type;
- void *data;
-
- struct Queue arguments;
-
- };
- */
- struct AST
- {
- enum AST_Type type;
- };
- struct AST_Error
- {
- enum AST_Type type;
- struct AST *error;
- };
- struct AST_Declaration_Error
- {
- enum AST_Type type;
- struct Denoted *error;
- };
- struct AST_Binary_Expression
- {
- enum AST_Type type;
-
- struct Type *value_type;
- struct AST *left;
- struct AST *right;
-
- };
- struct AST_Conditional_Expression
- {
- enum AST_Type type;
-
- struct Type *value_type;
-
- struct AST *left;
- struct AST *center;
- struct AST *right;
-
- };
- struct AST_Function_Expression
- {
- enum AST_Type type;
- struct Type *value_type;
-
- struct AST *id;
- /*queue of astrees*/
- struct Queue arguments;
- };
- struct AST_Rvalue_Expression
- {
- enum AST_Type type;
- struct Type *value_type;
- struct token *id;
- };
- struct AST_Lvalue_Expression
- {
- enum AST_Type type;
- struct Type *value_type;
- struct token *id;
- /*TODO*/
- void *object;
- };
- struct AST_Unary_Expression
- {
- enum AST_Type type;
- struct Type *value_type;
- struct AST *operand;
- };
-
- struct AST_Labeled_Statement
- {
- enum AST_Type type;
- struct token *label;
- struct AST *statement;
- struct Scope *scope;
- };
- struct AST_Compound_Statement
- {
- enum AST_Type type;
- struct Scope *scope;
- struct Queue components;
- };
-
- struct AST_For_Statement
- {
- enum AST_Type type;
- struct AST *condition;
- struct AST *initialisation;
- struct AST *update;
- struct AST *body_statement;
- };
- struct AST_While_Statement
- {
- enum AST_Type type;
- struct AST *condition;
- struct AST *body_statement;
- };
- struct AST_Do_While_Statement
- {
- enum AST_Type type;
- struct AST *body_statement;
- struct AST *condition;
- };
- struct AST_If_Statement
- {
- enum AST_Type type;
- struct AST* condition;
- struct AST* body_statement;
- struct AST* else_statement;
-
- };
- struct AST_Goto_Statement
- {
- enum AST_Type type;
- struct token *label;
- };
- struct AST_Switch_Statement
- {
- enum AST_Type type;
- struct AST* condition;
- struct AST* body_statement;
- };
- struct AST_Return_Statement
- {
- enum AST_Type type;
- struct AST* return_expression;
-
- };
-
-
- struct AST_Type_Definition
- {
- enum AST_Type type;
- struct Denoted_Typedef *definition;
- struct Scope *scope;
- };
- struct AST_Object_Declaration
- {
- enum AST_Type type;
- struct Denoted_Object *object;
- struct AST *initializer;
- struct Scope *scope;
- };
- struct AST_Function_Definition
- {
- enum AST_Type type;
- struct Denoted_Function *function;
- struct Scope *scope;
- };
- struct AST_Function_Declaration
- {
- enum AST_Type type;
- struct Denoted_Function *function;
- struct Scope *scope;
- };
- struct AST_Translation_Unit
- {
- enum AST_Type type;
- struct Queue components;
- struct Scope *scope;
- };
-
-
-
-
- struct AST_Error* get_error_tree(struct AST *error);
- struct AST_Declaration_Error* get_declaration_error_tree(struct Denoted *error);
- struct AST_Binary_Expression* get_binary_expression_tree(struct AST *left,struct AST *right,enum AST_Type type);
- struct AST_Conditional_Expression* get_conditional_expression_tree(struct AST *left,struct AST *center,struct AST *right);
- struct AST_Function_Expression* get_function_expression_tree(struct AST* id,struct Scope *scope);
- struct AST_Unary_Expression* get_unary_expression_tree(struct AST *operand,enum AST_Type type);
- struct AST_Rvalue_Expression* get_rvalue_expression_tree(struct token *id);
- struct AST_Lvalue_Expression* get_lvalue_expression_tree(struct token *id,struct Scope* scope);
- struct AST_Labeled_Statement* get_labeled_statement_tree(struct token *label,struct AST* statement,struct Scope *scope,enum AST_Type type);
- struct AST_Compound_Statement* get_compound_statement_tree(struct Scope *parent_scope);
- struct AST_If_Statement* get_if_statement_tree();
- struct AST_Switch_Statement* get_switch_statement_tree();
- struct AST_While_Statement* get_while_statement_tree();
- struct AST_Do_While_Statement* get_do_while_statement_tree();
- struct AST_For_Statement* get_for_statement_tree();
- struct AST_Return_Statement* get_return_statement_tree(struct AST* return_expression);
- struct AST_Goto_Statement* get_goto_statement_tree(struct token *label,struct Scope *scope);
- struct AST* get_nop_tree();
- struct AST_Type_Definition* get_type_definition_tree(struct Denoted_Typedef *definition,struct Scope *scope);
- struct AST_Object_Declaration* get_object_declaration_tree(struct Denoted_Object *object,struct AST *initializer,struct Scope *scope);
- struct AST_Function_Declaration* get_function_declaration_tree(struct Scope *scope,struct Denoted_Function *function);
- struct AST_Function_Definition* get_function_definition_tree(struct Scope *scope,struct Denoted_Function *function);
- struct AST_Translation_Unit* get_translation_unit_tree(struct Scope* parent_scope);
-
-
- #define BIN_EXPR_PTR(x) ((struct AST_Binary_Expression*)(x))
- #define UN_EXPR_PTR(x) ((struct AST_Unary_Expression*)(x))
- #define LVAL_EXPR_PTR(x) ((struct AST_Lvalue_Expression*)(x))
- #define RVAL_EXPR_PTR(x) ((struct AST_Rvalue_Expression*)(x))
- #define DECLR_PTR(x) ((struct AST_Declaration*)(x))
- #define IF_ST_PTR(s) ((struct AST_If_Statement*)(x))
-
-
-
- #endif
F diff --git a/ast.hh b/ast.hh
deleted file mode 100644
--- a/ast.hh
+++ /dev/null
- #ifndef GCC_AST_HH
- #define GCC_AST_HH GCC_AST_HH
-
- enum AST_Type{
- OP_COMMA
- ,OP_ADDITION,OP_SUBTRACTION,OP_MUL,OP_DIV,OP_REMAINDER
- ,OP_COND,OP_FUNCTION
- ,OP_ASSIGN,OP_ADD_ASSIGN,OP_SUBTRACT_ASSIGN,OP_MULTIPLY_ASSIGN,OP_REMAINDER_ASSIGN,OP_DIV_ASSIGN
- ,OP_SHIFT_LEFT_ASSIGN,OP_SHIFT_RIGHT_ASSIGN
- ,OP_AND_ASSIGN,OP_XOR_ASSIGN,OP_PIPE_ASSIGN
- ,OP_NOP
- ,OP_LOGICAL_OR,OP_LOGICAL_AND,OP_LOGICAL_NOT
- ,OP_BITWISE_OR,OP_BITWISE_AND,OP_BITWISE_XOR,OP_BITWISE_NOT
- ,OP_ADDR_OF,OP_DEREFERENCE,OP_MEMBER_TROUGH_PTR,OP_MEMBER,OP_ARR_SUBSCRIPT
- ,OP_POSTFIX_INC,OP_POSTFIX_DEC
- ,OP_PREFIX_INC,OP_PREFIX_DEC
- ,OP_UNARY_PLUS,OP_UNARY_MINUS
- ,OP_CAST,OP_SIZEOF
- ,OP_SHIFT_LEFT,OP_SHIFT_RIGHT
- ,OP_LESS_EQ,OP_GREATER_EQ
- ,OP_LESS,OP_GREATER
- ,OP_EQUAL,OP_NOT_EQUAL
- ,OP_LVALUE,OP_RVALUE
- ,ST_COMPOUND,ST_EXPRESSION,ST_SWITCH,ST_IF,ST_WHILE,ST_DO_WHILE,ST_GOTO,ST_LABEL,ST_CASE,ST_DEFAULT
- ,ST_CONTINUE,ST_BREAK,ST_RETURN,ST_FOR
- ,ST_OBJECT_DECLARATION,ST_TYPE_DEFINITION,ST_FUNCTION_DEFINITION
- ,ST_FUNCTION_DECLARATION
- ,TRANSLATION_UNIT
- ,ERROR,ERROR_DECLARATION
- };
- struct AST;
- struct AST_Error;
- struct AST_Declaration_Error;
- struct AST_Binary_Expression;
- struct AST_Conditional_Expression;
- struct AST_Function_Expression;
- struct AST_Rvalue_Expression;
- struct AST_Lvalue_Expression;
- struct AST_Unary_Expression;
- struct AST_Labeled_Statement;
- struct AST_Compound_Statement;
- struct AST_For_Statement;
- struct AST_While_Statement;
- struct AST_Do_While_Statement;
- struct AST_If_Statement;
- struct AST_Goto_Statement;
- struct AST_Switch_Statement;
- struct AST_Return_Statement;
- struct AST_Type_Definition;
- struct AST_Object_Declaration;
- struct AST_Function_Definition;
- struct AST_Function_Declaration;
- struct AST_Translation_Unit;
-
- #endif
F diff --git a/chonky.c b/chonky.c
deleted file mode 100644
--- a/chonky.c
+++ /dev/null
- #ifndef GKEYWORDS_MENU_C
- #define GKEYWORDS_MENU_C GKEYWORDS_MENU_C
- #include"chonky.h"
- #include<stddef.h>
-
- int cmpr[256]={0,0,0,0,0,0,0,0,0,57,57,57,0,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57,29,30,31,0,32,33,34,37,38,41,42,44,43,45,46,28,28,28,28,28,28,28,28,28,28,47,48,49,51,50,52,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,39,53,40,54,55,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,35,56,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};
- int uncmpr[256]={0,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,57,33,34,35,37,38,39,123,125,40,41,91,93,42,43,45,44,46,47,58,59,60,62,61,63,92,94,95,124,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};
-
-
- struct automata_entry chonky[]={
- {0,KW_NOTYPE,{NULL,&(chonky[2]),&(chonky[10]),&(chonky[11]),&(chonky[12]),&(chonky[13]),&(chonky[14]),&(chonky[15]),&(chonky[16]),&(chonky[2]),&(chonky[17]),&(chonky[2]),&(chonky[2]),&(chonky[18]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[19]),&(chonky[20]),&(chonky[21]),&(chonky[22]),&(chonky[23]),&(chonky[24]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[1]),&(chonky[25]),&(chonky[3]),NULL,&(chonky[26]),&(chonky[27]),&(chonky[28]),&(chonky[29]),&(chonky[30]),&(chonky[31]),&(chonky[32]),&(chonky[33]),&(chonky[34]),&(chonky[35]),&(chonky[36]),&(chonky[37]),&(chonky[38]),&(chonky[39]),&(chonky[5]),&(chonky[40]),&(chonky[41]),&(chonky[42]),&(chonky[43]),&(chonky[44]),&(chonky[45]),&(chonky[46]),&(chonky[47]),&(chonky[48]),&(chonky[49]),NULL,} },
- {1,KW_NUMBER,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[1]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {0,KW_NOTYPE,{&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[4]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),} },
- {1,KW_STRING,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_FORWARD_SLASH,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[6]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[9]),NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,KW_NOTYPE,{&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[7]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),} },
- {0,KW_NOTYPE,{&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[8]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),} },
- {1,KW_COMMENT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_DIV_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[50]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[51]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[52]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[53]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[54]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[55]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[56]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[57]),&(chonky[2]),&(chonky[58]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[59]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[60]),&(chonky[2]),&(chonky[2]),&(chonky[61]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[62]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[63]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[64]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[65]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[66]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[67]),&(chonky[68]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[69]),&(chonky[2]),&(chonky[2]),&(chonky[70]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[71]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[72]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[73]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[74]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_EXCLAMATION,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[75]),NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_PERCENT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[76]),NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_AND,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[77]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[78]),NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_QUOTE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_OPEN_CURLY,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_CLOSE_CURLY,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_OPEN_NORMAL,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_CLOSE_NORMAL,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_OPEN_SQUARE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_CLOSE_SQUARE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_STAR,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[79]),NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_PLUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[80]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[81]),NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_MINUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[82]),NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[83]),&(chonky[84]),NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_COMMA,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_DOT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_COLUMN,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_SEMI_COLUMN,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_LESS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[85]),NULL,&(chonky[86]),NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_MORE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[87]),&(chonky[88]),NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[89]),NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_QUESTION,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_BACK_SLASH,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_HAT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[90]),NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_FLOOR,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_PIPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[91]),NULL,NULL,NULL,NULL,&(chonky[92]),NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[93]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[94]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[95]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[96]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[97]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[98]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_DO,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[99]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[100]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[101]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[102]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[103]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[104]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[105]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_IF,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[106]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[107]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[108]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[109]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[110]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[111]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[112]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[113]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[114]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[115]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[116]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[117]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[118]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[119]),&(chonky[2]),&(chonky[2]),&(chonky[120]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[121]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_NOT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_PERCENT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_AND_AND,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_AND_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_STAR_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_PLUSPLUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_PLUS_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_MINUSMINUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_ARROW,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_MINUS_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_SHIFT_LEFT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[122]),NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_LESS_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_SHIFT_RIGHT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[123]),NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_MORE_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_EQEQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_HAT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_PIPE_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_PIPE_PIPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[124]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[125]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[126]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[127]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[128]),&(chonky[129]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[130]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[131]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[132]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[133]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[134]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[135]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_FOR,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[136]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_INT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[137]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[138]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[139]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[140]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[141]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[142]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[143]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[144]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[145]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[146]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[147]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[148]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[149]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[150]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[151]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_SHIFT_LEFT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_SHIFT_RIGHT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,KW_AUTO,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[152]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_CASE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_CHAR,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[153]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[154]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[155]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[156]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ELSE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ENUM,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[157]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[158]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_GOTO,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_LONG,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[159]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[160]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[161]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[162]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[163]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[164]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[165]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[166]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[167]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[168]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[169]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_VOID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[170]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[171]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_BREAK,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_CONST,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[172]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[173]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[174]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[175]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_FLOAT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[176]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[177]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_SHORT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[178]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[179]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[180]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[181]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[182]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[183]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_UNION,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[184]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[185]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_WHILE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[186]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[187]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_DOUBLE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_EXTERN,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[188]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_RETURN,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_SIGNED,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_SIZEOF,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_STATIC,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_STRUCT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_SWITCH,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[189]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[190]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[191]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[192]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_DEFAULT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[193]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_TYPEDEF,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[194]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[195]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_CONTINUE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_REGISTER,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_UNSIGNED,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
- {1,KW_VOLATILE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },};
-
- #endif /*#ifndef GKEYWORDS_MENU_C*/
F diff --git a/chonky.h b/chonky.h
deleted file mode 100644
--- a/chonky.h
+++ /dev/null
- #ifndef GKEYWORDS_MENU_H
- #define GKEYWORDS_MENU_H GKEYWORDS_MENU_H
- #include <stddef.h>
-
-
-
- enum KEYWORDS{KW_AUTO,KW_DO,KW_DOUBLE,KW_INT,KW_STRUCT,KW_BREAK,KW_ELSE,KW_LONG,KW_SWITCH,KW_CASE,KW_ENUM,KW_REGISTER,KW_TYPEDEF,KW_CHAR,KW_EXTERN,KW_RETURN,KW_UNION,KW_CONST,KW_FLOAT,KW_SHORT,KW_UNSIGNED,KW_CONTINUE,KW_FOR,KW_SIGNED,KW_VOID,KW_DEFAULT,KW_GOTO,KW_SIZEOF,KW_VOLATILE,KW_IF,KW_STATIC,KW_WHILE,KW_EXCLAMATION,KW_BACK_SLASH,KW_PERCENT,KW_AND,KW_AND_AND,KW_QUOTE,KW_OPEN_NORMAL,KW_CLOSE_NORMAL,KW_STAR,KW_PLUS,KW_COMMA,KW_MINUS,KW_DOT,KW_ARROW,KW_COLUMN,KW_SEMI_COLUMN,KW_LESS,KW_EQ,KW_EQEQ,KW_MORE,KW_QUESTION,KW_OPEN_SQUARE,KW_CLOSE_SQUARE,KW_HAT,KW_FLOOR,KW_OPEN_CURLY,KW_CLOSE_CURLY,KW_PIPE,KW_PIPE_PIPE,KW_TILDE,KW_PLUSPLUS,KW_MINUSMINUS,KW_SHIFT_RIGHT,KW_SHIFT_LEFT,KW_LESS_EQ,KW_MORE_EQ,KW_NOT_EQ,KW_PLUS_EQ,KW_MINUS_EQ,KW_STAR_EQ,KW_PERCENT_EQ,KW_SHIFT_LEFT_EQ,KW_SHIFT_RIGHT_EQ,KW_AND_EQ,KW_HAT_EQ,KW_PIPE_EQ,KW_DIV_EQ,KW_FORWARD_SLASH,KW_NOTYPE,KW_NUMBER,KW_COMMENT,KW_ID,KW_STRING,PKW_IF,PKW_INCLUDE,PKW_DEFINE,PKW_UNDEF,PKW_PRAGMA,PKW_ENDIF,PKW_IFNDEF,PKW_IFDEF,PKW_ELIF,PKW_ERROR,PKW_COMMENT,PKW_NOTYPE};
-
-
- struct automata_entry
- {
- unsigned char is_final;
- enum KEYWORDS type;
- struct automata_entry* delta[58];
- };
- extern struct automata_entry chonky[];
- extern int cmpr[256];
- extern int uncmpr[256];
-
- #endif
F diff --git a/chonky_jr.c b/chonky_jr.c
deleted file mode 100644
--- a/chonky_jr.c
+++ /dev/null
- #ifndef GPREPROCESSING_KEYWORDS_MENU_C
- #define GPREPROCESSING_KEYWORDS_MENU_C GPREPROCESSING_KEYWORDS_MENU_C
- #include"chonky.h"
- #include "chonky_jr.h"
-
-
- struct automata_entry chonky_jr[]={
-
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[5]),&(chonky_jr[6]),NULL,NULL,NULL,&(chonky_jr[7]),NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[8]),NULL,NULL,NULL,NULL,&(chonky_jr[9]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[1]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[3]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),} },
- {0,PKW_NOTYPE,{&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[4]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),} },
- {1,PKW_COMMENT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[10]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[11]),NULL,&(chonky_jr[12]),NULL,NULL,NULL,&(chonky_jr[13]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[14]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[15]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[16]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[17]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[18]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[19]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[20]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[21]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_IF,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[22]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[23]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,&(chonky_jr[24]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,&(chonky_jr[25]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[26]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[27]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[28]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[29]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[30]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[31]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[32]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[33]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[34]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[35]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[36]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_ELIF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[37]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[38]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[39]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[40]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[41]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[42]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[43]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[44]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_ENDIF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_ERROR,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_IFDEF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[45]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[46]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,&(chonky_jr[47]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_UNDEF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_DEFINE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_IFNDEF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[48]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_PRAGMA,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
- {1,PKW_INCLUDE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },};
-
- #endif /*#ifndef GPREPROCESSING_KEYWORDS_MENU_C*/
F diff --git a/chonky_jr.h b/chonky_jr.h
deleted file mode 100644
--- a/chonky_jr.h
+++ /dev/null
- #ifndef GPREPROCESSING_KEYWORDS_MENU_H
- #define GPREPROCESSING_KEYWORDS_MENU_H GPREPROCESSING_KEYWORDS_MENU_H
- #include "chonky_jr.h"
-
-
- extern struct automata_entry chonky_jr[];
-
-
- #endif
F diff --git a/denoted.c b/denoted.c
deleted file mode 100644
--- a/denoted.c
+++ /dev/null
- #ifndef GCC_DENOTED_C
- #define GCC_DENOTED_C GCC_DENOTED_C
- #include "denoted.h"
-
- struct Denoted* get_denoted_error(struct Denoted *error)
- {
- struct Denoted_Error *ret;
- ret=malloc(sizeof(struct Denoted_Error));
- ret->denotation=DT_Error;
- ret->error=error;
-
- return (struct Denoted*)ret;
- }
- struct Denoted* get_denoted_base(struct token *id,struct Type *type,enum Denotation_Type denotation)
- {
- struct Denoted_Base *ret;
- ret=malloc(sizeof(struct Denoted_Base));
- ret->denotation=denotation;
- ret->id=id;
- ret->type=type;
-
-
- return (struct Denoted*)ret;
- }
- struct Denoted* get_denoted_function(struct token *id,struct Type *return_type,enum Function_Specifier fs)
- {
- struct Denoted_Function *ret;
- ret=malloc(sizeof(struct Denoted_Function));
- ret->denotation=DT_Function;
- ret->id=id;
- ret->type=return_type;
- ret->function_specifier=fs;
- ret->body=NULL;
-
- return (struct Denoted*)ret;
- }
- struct Denoted* get_denoted_object(struct token *id, enum Storage_Class sc,struct Type *type)
- {
- struct Denoted_Object *ret;
- ret=malloc(sizeof(struct Denoted_Object));
- ret->denotation=DT_Object;
- ret->id=id;
-
- ret->object=malloc(sizeof(struct Object));
- ret->object->type=type;
- ret->object->location=NULL;
- ret->object->storage_class=sc;
-
- return (struct Denoted*)ret;
- }
-
- struct Denoted* get_denoted_typedef(struct Denoted_Base *base)
- {
- struct Denoted_Typedef *ret;
- ret=malloc(sizeof(struct Denoted_Typedef));
- ret->denotation=DT_Typedef;
- ret->type=base->type;
- ret->id=base->id;
-
- return (struct Denoted*)ret;
-
- }
- struct Denoted* get_denoted_enum_const_expr(struct token *id,struct Enum *parent,struct AST* expression)
- {
- struct Denoted_Enum_Const *ret;
- ret=malloc(sizeof(struct Denoted_Enum_Const));
- ret->denotation=DT_Enum_Constant;
- ret->id=id;
- ret->parent=parent;
- ret->expression=expression;
- ret->value=evaluate_const_expression_integer(expression);
-
- return (struct Denoted*)ret;
-
- }
- struct Denoted* get_denoted_enum_const_num(struct token *id,struct Enum *parent,int value)
- {
- struct Denoted_Enum_Const *ret;
- ret=malloc(sizeof(struct Denoted_Enum_Const));
- ret->denotation=DT_Enum_Constant;
- ret->id=id;
- ret->parent=parent;
- ret->expression=NULL;
- ret->value=value;
-
- return (struct Denoted*)ret;
- }
- struct Denoted* get_denoted_enum(struct token *id,struct Enum *enumerator)
- {
- struct Denoted_Enum *ret;
- ret=malloc(sizeof(struct Denoted_Enum));
- ret->denotation=DT_Enum;
- ret->id=id;
- ret->enumeration=enumerator;
-
- return (struct Denoted*)ret;
- }
- struct Denoted* get_denoted_struct_union(struct token *id,struct Struct_Union *struct_union)
- {
- struct Denoted_Struct_Union *ret;
- ret=malloc(sizeof(struct Denoted_Struct_Union));
- ret->denotation=DT_Struct_Union_Tag;
- ret->id=id;
- ret->struct_union=struct_union;
-
- return (struct Denoted*)ret;
- }
- struct Denoted* get_denotation_prototype()
- {
- struct Denotation_Prototype *ret;
- ret=malloc(sizeof(struct Denotation_Prototype));
- ret->denotation=DT_Prototype;
- ret->type=NULL;
- ret->storage_class=SC_NONE;
- ret->specifier=TS_NONE;
- ret->constraint=TC_NONE;
- ret->sign=TSIGN_NONE;
- ret->function_specifier=FS_None;
- ret->struct_union=NULL;
- ret->enumerator=NULL;
- ret->size=0;
- ret->is_const=ret->is_volatile=0;
-
- return (struct Denoted*)ret;
- }
- struct Denoted* extract_denoted(struct Denoted_Base *base,struct Denotation_Prototype *prototype,char allow_abstract)
- {
- if(base->type->specifier==TS_FUNC)
- {
- if(base->id==NULL && !allow_abstract)
- {
- return get_denoted_error(get_denoted_function(NULL,((struct Type_Function*)base->type)->return_type,prototype->function_specifier));
- }else
- {
- return get_denoted_function(base->id,base->type,prototype->function_specifier);
- }
- }else if(prototype->storage_class==SC_TYPEDEF)
- {
- if(base->id==NULL && !allow_abstract)
- {
- return get_denoted_error(get_denoted_typedef(base));
- }else
- {
- return get_denoted_typedef(base);
- }
- }else
- {
- if(base->id==NULL && !allow_abstract)
- {
- return get_denoted_error(get_denoted_object(base->id,prototype->storage_class,base->type));
- }else
- {
- return get_denoted_object(base->id,prototype->storage_class,base->type);
- }
- }
- }
- #endif
F diff --git a/denoted.h b/denoted.h
deleted file mode 100644
--- a/denoted.h
+++ /dev/null
- #ifndef GCC_DENOTED_H
- #define GCC_DENOTED_H GCC_DENOTED_H
- #include "denoted.hh"
- #include "type.h"
- #include "scope.h"
- #include "semantics.h"
-
-
- enum Denotation_Type;
- enum Function_Specifier;
- enum Storage_Class;
-
-
- struct Denoted
- {
- enum Denotation_Type denotation;
- };
-
-
- struct Denoted_Error
- {
- enum Denotation_Type denotation;
- struct Denoted *error;
- };
- struct Denoted_Base
- {
- enum Denotation_Type denotation;
- struct token *id;
- struct Type *type;
- };
- struct Denoted_Function
- {
- enum Denotation_Type denotation;
- struct token *id;
- struct Type *type;
-
-
- enum Function_Specifier function_specifier;
- struct AST_Compound_Statement *body;
- };
- struct Denoted_Object
- {
- enum Denotation_Type denotation;
- struct token *id;
-
- struct Object *object;
- };
- struct Denoted_Typedef
- {
- enum Denotation_Type denotation;
- struct token *id;
- struct Type *type;
-
- };
- struct Denoted_Enum
- {
- enum Denotation_Type denotation;
- struct token *id;
-
- struct Enum *enumeration;
- };
- struct Denoted_Enum_Const
- {
- enum Denotation_Type denotation;
- struct token *id;
-
- struct Enum *parent;
- int value;
- struct AST* expression;
- };
-
- struct Denoted_Struct_Union
- {
- enum Denotation_Type denotation;
- struct token *id;
-
- struct Struct_Union *struct_union;
- };
-
- struct Denotation_Prototype
- {
- enum Denotation_Type denotation;
- struct Type *type;
-
-
- enum Storage_Class storage_class;
- enum Type_Specifier specifier;
- enum Type_Constraint constraint;
- enum Type_Signedness sign;
- enum Function_Specifier function_specifier;
-
- struct Struct_Union *struct_union;
- struct Enum *enumerator;
-
- size_t size;
- char is_const:1;
- char is_volatile:1;
- };
- struct Object
- {
- struct Type *type;
- struct Location *location;
- enum Storage_Class storage_class;
- };
-
-
-
-
- struct Denoted* get_denoted_error(struct Denoted *error);
- struct Denoted* get_denoted_function(struct token *id,struct Type *return_type,enum Function_Specifier fs);
- struct Denoted* get_denoted_object(struct token *id, enum Storage_Class sc,struct Type *type);
- struct Denoted* get_denoted_typedef(struct Denoted_Base *base);
- struct Denoted* get_denoted_enum_const_expr(struct token *id,struct Enum *parent,struct AST* expression);
- struct Denoted* get_denoted_enum_const_num(struct token *id,struct Enum *parent,int value);
- struct Denoted* get_denoted_enum(struct token *id,struct Enum *enumerator);
- struct Denoted* get_denoted_struct_union(struct token *id,struct Struct_Union *struct_union);
- struct Denoted* get_denoted_base(struct token *id,struct Type *type,enum Denotation_Type denotation);
-
- struct Denoted* extract_denoted(struct Denoted_Base *base,struct Denotation_Prototype *prototype,char allow_abstract);
- struct Denoted* get_denotation_prototype();
- #endif
F diff --git a/denoted.hh b/denoted.hh
deleted file mode 100644
--- a/denoted.hh
+++ /dev/null
- #ifndef GCC_DENOTED_HH
- #define GCC_DENOTED_HH GCC_DENOTED_HH
-
-
- enum Denotation_Type
- {
- DT_Macro,
- DT_Macro_Parameter,
- DT_Label,
- DT_Object,
- DT_Typedef,
- DT_Function,
- DT_Enum,
- DT_Enum_Constant,
- DT_Struct_Union_Member,
- DT_Struct_Union_Tag,
- DT_Error,
- DT_Prototype
- };
-
- enum Function_Specifier
- {
- FS_Inline,
- FS_None
- };
- enum Storage_Class
- {
- SC_EXTERN,
- SC_STATIC,
- SC_TYPEDEF,
- SC_NONE
- };
-
- struct Denoted;
- struct Denoted_Error;
- struct Denoted_Base;
- struct Denoted_Function;
- struct Denoted_Object;
- struct Denoted_Typedef;
- struct Denoted_Enum;
- struct Denoted_Enum_Const;
- struct Denoted_Struct_Union;
- struct Denotation_Prototype;
- struct Object;
-
-
- #endif
F diff --git a/lex/chonky.c b/lex/chonky.c
new file mode 100644
--- /dev/null
+++ b/lex/chonky.c
+ #ifndef GKEYWORDS_MENU_C
+ #define GKEYWORDS_MENU_C GKEYWORDS_MENU_C
+ #include"chonky.h"
+ #include<stddef.h>
+
+ int cmpr[256]={0,0,0,0,0,0,0,0,0,57,57,57,0,57,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,57,29,30,31,0,32,33,34,37,38,41,42,44,43,45,46,28,28,28,28,28,28,28,28,28,28,47,48,49,51,50,52,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,39,53,40,54,55,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,35,56,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};
+ int uncmpr[256]={0,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,57,33,34,35,37,38,39,123,125,40,41,91,93,42,43,45,44,46,47,58,59,60,62,61,63,92,94,95,124,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};
+
+
+ struct automata_entry chonky[]={
+ {0,KW_NOTYPE,{NULL,&(chonky[2]),&(chonky[10]),&(chonky[11]),&(chonky[12]),&(chonky[13]),&(chonky[14]),&(chonky[15]),&(chonky[16]),&(chonky[2]),&(chonky[17]),&(chonky[2]),&(chonky[2]),&(chonky[18]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[19]),&(chonky[20]),&(chonky[21]),&(chonky[22]),&(chonky[23]),&(chonky[24]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[1]),&(chonky[25]),&(chonky[3]),NULL,&(chonky[26]),&(chonky[27]),&(chonky[28]),&(chonky[29]),&(chonky[30]),&(chonky[31]),&(chonky[32]),&(chonky[33]),&(chonky[34]),&(chonky[35]),&(chonky[36]),&(chonky[37]),&(chonky[38]),&(chonky[39]),&(chonky[5]),&(chonky[40]),&(chonky[41]),&(chonky[42]),&(chonky[43]),&(chonky[44]),&(chonky[45]),&(chonky[46]),&(chonky[47]),&(chonky[48]),&(chonky[49]),NULL,} },
+ {1,KW_NUMBER,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[1]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {0,KW_NOTYPE,{&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[4]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),&(chonky[3]),} },
+ {1,KW_STRING,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_FORWARD_SLASH,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[6]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[9]),NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,KW_NOTYPE,{&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[7]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),} },
+ {0,KW_NOTYPE,{&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[8]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),&(chonky[6]),} },
+ {1,KW_COMMENT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_DIV_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[50]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[51]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[52]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[53]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[54]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[55]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[56]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[57]),&(chonky[2]),&(chonky[58]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[59]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[60]),&(chonky[2]),&(chonky[2]),&(chonky[61]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[62]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[63]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[64]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[65]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[66]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[67]),&(chonky[68]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[69]),&(chonky[2]),&(chonky[2]),&(chonky[70]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[71]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[72]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[73]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[74]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_EXCLAMATION,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[75]),NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_PERCENT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[76]),NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_AND,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[77]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[78]),NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_QUOTE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_OPEN_CURLY,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_CLOSE_CURLY,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_OPEN_NORMAL,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_CLOSE_NORMAL,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_OPEN_SQUARE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_CLOSE_SQUARE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_STAR,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[79]),NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_PLUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[80]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[81]),NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_MINUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[82]),NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[83]),&(chonky[84]),NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_COMMA,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_DOT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_COLUMN,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_SEMI_COLUMN,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_LESS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[85]),NULL,&(chonky[86]),NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_MORE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[87]),&(chonky[88]),NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[89]),NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_QUESTION,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_BACK_SLASH,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_HAT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[90]),NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_FLOOR,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_PIPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[91]),NULL,NULL,NULL,NULL,&(chonky[92]),NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[93]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[94]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[95]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[96]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[97]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[98]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_DO,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[99]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[100]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[101]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[102]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[103]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[104]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[105]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_IF,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[106]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[107]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[108]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[109]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[110]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[111]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[112]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[113]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[114]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[115]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[116]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[117]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[118]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[119]),&(chonky[2]),&(chonky[2]),&(chonky[120]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[121]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_NOT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_PERCENT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_AND_AND,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_AND_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_STAR_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_PLUSPLUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_PLUS_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_MINUSMINUS,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_ARROW,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_MINUS_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_SHIFT_LEFT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[122]),NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_LESS_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_SHIFT_RIGHT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[123]),NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_MORE_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_EQEQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_HAT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_PIPE_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_PIPE_PIPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[124]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[125]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[126]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[127]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[128]),&(chonky[129]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[130]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[131]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[132]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[133]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[134]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[135]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_FOR,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[136]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_INT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[137]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[138]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[139]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[140]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[141]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[142]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[143]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[144]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[145]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[146]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[147]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[148]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[149]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[150]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[151]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_SHIFT_LEFT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_SHIFT_RIGHT_EQ,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,KW_AUTO,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[152]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_CASE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_CHAR,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[153]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[154]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[155]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[156]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ELSE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ENUM,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[157]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[158]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_GOTO,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_LONG,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[159]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[160]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[161]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[162]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[163]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[164]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[165]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[166]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[167]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[168]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[169]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_VOID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[170]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[171]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_BREAK,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_CONST,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[172]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[173]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[174]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[175]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_FLOAT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[176]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[177]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_SHORT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[178]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[179]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[180]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[181]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[182]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[183]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_UNION,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[184]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[185]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_WHILE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[186]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[187]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_DOUBLE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_EXTERN,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[188]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_RETURN,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_SIGNED,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_SIZEOF,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_STATIC,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_STRUCT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_SWITCH,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[189]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[190]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[191]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[192]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_DEFAULT,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[193]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_TYPEDEF,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[194]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_ID,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[195]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_CONTINUE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_REGISTER,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_UNSIGNED,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },
+ {1,KW_VOLATILE,{NULL,&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),&(chonky[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky[2]),NULL,NULL,} },};
+
+ #endif /*#ifndef GKEYWORDS_MENU_C*/
F diff --git a/lex/chonky.h b/lex/chonky.h
new file mode 100644
--- /dev/null
+++ b/lex/chonky.h
+ #ifndef GKEYWORDS_MENU_H
+ #define GKEYWORDS_MENU_H GKEYWORDS_MENU_H
+ #include <stddef.h>
+
+
+
+ enum KEYWORDS{KW_AUTO,KW_DO,KW_DOUBLE,KW_INT,KW_STRUCT,KW_BREAK,KW_ELSE,KW_LONG,KW_SWITCH,KW_CASE,KW_ENUM,KW_REGISTER,KW_TYPEDEF,KW_CHAR,KW_EXTERN,KW_RETURN,KW_UNION,KW_CONST,KW_FLOAT,KW_SHORT,KW_UNSIGNED,KW_CONTINUE,KW_FOR,KW_SIGNED,KW_VOID,KW_DEFAULT,KW_GOTO,KW_SIZEOF,KW_VOLATILE,KW_IF,KW_STATIC,KW_WHILE,KW_EXCLAMATION,KW_BACK_SLASH,KW_PERCENT,KW_AND,KW_AND_AND,KW_QUOTE,KW_OPEN_NORMAL,KW_CLOSE_NORMAL,KW_STAR,KW_PLUS,KW_COMMA,KW_MINUS,KW_DOT,KW_ARROW,KW_COLUMN,KW_SEMI_COLUMN,KW_LESS,KW_EQ,KW_EQEQ,KW_MORE,KW_QUESTION,KW_OPEN_SQUARE,KW_CLOSE_SQUARE,KW_HAT,KW_FLOOR,KW_OPEN_CURLY,KW_CLOSE_CURLY,KW_PIPE,KW_PIPE_PIPE,KW_TILDE,KW_PLUSPLUS,KW_MINUSMINUS,KW_SHIFT_RIGHT,KW_SHIFT_LEFT,KW_LESS_EQ,KW_MORE_EQ,KW_NOT_EQ,KW_PLUS_EQ,KW_MINUS_EQ,KW_STAR_EQ,KW_PERCENT_EQ,KW_SHIFT_LEFT_EQ,KW_SHIFT_RIGHT_EQ,KW_AND_EQ,KW_HAT_EQ,KW_PIPE_EQ,KW_DIV_EQ,KW_FORWARD_SLASH,KW_NOTYPE,KW_NUMBER,KW_COMMENT,KW_ID,KW_STRING,PKW_IF,PKW_INCLUDE,PKW_DEFINE,PKW_UNDEF,PKW_PRAGMA,PKW_ENDIF,PKW_IFNDEF,PKW_IFDEF,PKW_ELIF,PKW_ERROR,PKW_COMMENT,PKW_NOTYPE};
+
+
+ struct automata_entry
+ {
+ unsigned char is_final;
+ enum KEYWORDS type;
+ struct automata_entry* delta[58];
+ };
+ extern struct automata_entry chonky[];
+ extern int cmpr[256];
+ extern int uncmpr[256];
+
+ #endif
F diff --git a/lex/chonky_jr.c b/lex/chonky_jr.c
new file mode 100644
--- /dev/null
+++ b/lex/chonky_jr.c
+ #ifndef GPREPROCESSING_KEYWORDS_MENU_C
+ #define GPREPROCESSING_KEYWORDS_MENU_C GPREPROCESSING_KEYWORDS_MENU_C
+ #include"chonky.h"
+ #include "chonky_jr.h"
+
+
+ struct automata_entry chonky_jr[]={
+
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[5]),&(chonky_jr[6]),NULL,NULL,NULL,&(chonky_jr[7]),NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[8]),NULL,NULL,NULL,NULL,&(chonky_jr[9]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[1]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[2]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[3]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),} },
+ {0,PKW_NOTYPE,{&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[4]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),&(chonky_jr[2]),} },
+ {1,PKW_COMMENT,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[10]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[11]),NULL,&(chonky_jr[12]),NULL,NULL,NULL,&(chonky_jr[13]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[14]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[15]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[16]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[17]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[18]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[19]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[20]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[21]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_IF,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[22]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[23]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,&(chonky_jr[24]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,&(chonky_jr[25]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[26]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[27]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[28]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[29]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[30]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[31]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[32]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[33]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[34]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[35]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[36]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_ELIF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[37]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[38]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[39]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[40]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[41]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[42]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[43]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[44]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_ENDIF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_ERROR,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_IFDEF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[45]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,&(chonky_jr[46]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,&(chonky_jr[47]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_UNDEF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_DEFINE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_IFNDEF,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {0,PKW_NOTYPE,{NULL,NULL,NULL,NULL,NULL,NULL,&(chonky_jr[48]),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_PRAGMA,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },
+ {1,PKW_INCLUDE,{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,} },};
+
+ #endif /*#ifndef GPREPROCESSING_KEYWORDS_MENU_C*/
F diff --git a/lex/chonky_jr.h b/lex/chonky_jr.h
new file mode 100644
--- /dev/null
+++ b/lex/chonky_jr.h
+ #ifndef GPREPROCESSING_KEYWORDS_MENU_H
+ #define GPREPROCESSING_KEYWORDS_MENU_H GPREPROCESSING_KEYWORDS_MENU_H
+ #include <chonky_jr.h>
+
+
+ extern struct automata_entry chonky_jr[];
+
+
+ #endif
F diff --git a/lex/lexer.c b/lex/lexer.c
new file mode 100644
--- /dev/null
+++ b/lex/lexer.c
+ #ifndef LEXER_C
+ #define LEXER_C LEXER_C
+ #include "lexer.h"
+
+ struct Queue* lex(struct Source_File *src,struct Program *prog)
+ {
+
+
+ struct token *current_token;
+ struct Queue *tokens;
+
+ tokens=malloc(sizeof(struct Queue));
+ Queue_Init(tokens);
+ while(src->src[src->where_in_src]!='\0')
+ {
+
+ if(src->which_column==0 && src->src[src->where_in_src]=='#')
+ {
+ /*todo preprocesing*/
+ ++src->where_in_src;
+ ++src->which_column;
+ do_preproc_stuff(src,prog);
+ }else
+ {
+ current_token=get_next_token(src,prog,&chonky[0]);
+ if(current_token->type!=KW_NOTYPE)
+ Queue_Push(tokens,current_token);
+ else
+ free(current_token);
+ }
+ }
+
+
+ return tokens;
+
+ }
+
+ /*we have skipped the leading #*/
+ /*
+ #include string
+ #include <qchar>
+ #define [ id(list) replacement
+ #line number [string]
+ #if
+ #ifdef
+ #ifndef
+ #pragma
+ #error
+ #
+
+ these should be seperated from the ifs
+ #elif
+ #else
+ #endif
+
+
+ */
+ void do_preproc_stuff(struct Source_File *src,struct Program *prog)
+ {
+ struct token *hold;
+ hold=get_next_token(src,prog,&chonky_jr[0]);
+ switch(hold->type)
+ {
+ case PKW_INCLUDE:
+ free(hold);
+ do_include_stuff(src,prog);
+ return;
+ case PKW_DEFINE:
+ free(hold);
+ do_define_stuff(src,prog);
+
+
+ default:
+ return;
+ /*TODO error*/
+
+ }
+ }
+
+ void do_include_stuff(struct Source_File *src,struct Program *prog)
+ {
+ struct token *hold;
+ hold=get_next_token(src,prog,&chonky[0]);
+ if(hold->type==KW_STRING)
+ {
+ hold->data[hold->data_size-1]='\0';
+ hold->data_size-=2;
+ ++hold->data;
+ handle_splicing(hold);
+ lex_program(hold->data,prog);
+ free(hold);
+ }else if(hold->type==KW_LESS)/*hack*/
+ {
+ ++hold->data;
+ while(src->src[src->where_in_src]!='>')
+ {
+ ++src->where_in_src;
+ ++hold->data_size;
+ }
+ /*skip the >*/
+ ++src->where_in_src;
+ hold->data[hold->data_size-1]='\0';
+ handle_splicing(hold);
+
+ lex_program(hold->data,prog);
+ free(hold);
+
+ }else
+ {
+ /*TODO error*/
+ return;
+ }
+ }
+ struct define_directive* get_define_directive(struct token* macro_name)
+ {
+ struct define_directive* ret;
+ ret=malloc(sizeof(struct define_directive));
+ ret->macro_name=macro_name;
+
+ Queue_Init(&ret->replacement_list);
+ Queue_Init(&ret->id_list);
+ ret->number_of_arguments=0;
+ Map_Init(&ret->arguments);
+ return ret;
+ }
+ /*
+ id[(list)] tokens \n
+ */
+ void do_define_stuff(struct Source_File *src,struct Program *prog)
+ {
+ struct token *hold;
+ struct define_directive *macro;
+ hold=get_next_token(src,prog,&chonky[0]);
+ if(hold->type==KW_ID)
+ {
+ macro=get_define_directive(hold);
+ Map_Push(&prog->defines,hold->data,hold->data_size,macro);
+ hold=get_next_token(src,prog,&chonky[0]);
+ }else
+ {
+ /*TODO error*/
+ return;
+ }
+ }
+
+
+
+ /*hack*/
+ void handle_splicing(struct token *word)
+ {
+ size_t back;
+ size_t front;
+ front=0;
+ for(front;front<word->data_size-1;++front)
+ {
+ if(word->data[front]=='\\' && word->data[front+1]=='\n')
+ {
+ front+=2;
+ break;
+ }
+ }
+ if(front==word->data_size-1)
+ return;
+
+ for(back=front-2;front<word->data_size-1;)
+ {
+ if(word->data[front]=='\\' && word->data[front+1]=='\n')
+ {
+ front+=2;
+ }else
+ {
+ word->data[back]=word->data[front];
+ ++front;
+ ++back;
+ }
+ }
+ word->data[back]=word->data[front];
+ }
+ struct token_vector Lex_Queue_Condense(struct Queue *tokens)
+ {
+ size_t i;
+ struct token_vector ret;
+ struct token *hold;
+
+ ret.tokens=malloc(sizeof(struct token)*tokens->size);
+ ret.size=tokens->size;
+
+ for(i=0;tokens->size>0;++i)
+ {
+ hold=Queue_Pop(tokens);
+ ret.tokens[i]=*hold;
+ free(hold);
+ }
+
+ Queue_Destroy(tokens);
+
+ return ret;
+ }
+
+ char check(struct Queue *tokens,enum KEYWORDS kw,size_t ahead)
+ {
+ size_t i;
+ struct Queue_Node *current;
+ if(tokens->size<=ahead)
+ {
+ return 0;
+ }else
+ {
+ for(i=0,current=tokens->first;i<ahead;++i,current=current->prev);
+
+ if( ((struct token*)(current->data))->type == kw )
+ {
+ return 1;
+ }else
+ {
+ return 0;
+ }
+ }
+ }
+ char get_and_check(struct Queue *tokens,enum KEYWORDS kw)
+ {
+ struct token *hold_token;
+ if(tokens->size==0)
+ {
+ return 0;
+ }else
+ {
+ hold_token=tokens->first->data;
+ if(hold_token->type!=kw)
+ {
+ return 0;
+ }else
+ {
+ hold_token=Queue_Pop(tokens);
+ free(hold_token);
+ return 1;
+ }
+ }
+ }
+ char get_and_check_unsafe(struct Queue *tokens,enum KEYWORDS kw)
+ {
+ struct token *hold_token;
+ hold_token=tokens->first->data;
+ if(hold_token->type!=kw)
+ {
+ return 0;
+ }else
+ {
+ hold_token=Queue_Pop(tokens);
+ free(hold_token);
+ return 1;
+ }
+ }
+ void chomp(struct Queue *tokens)
+ {
+ free(Queue_Pop(tokens));
+ }
+
+ enum KEYWORDS kw_get(struct Queue *tokens)
+ {
+ if(tokens->size==0)
+ return KW_NOTYPE;
+ return ((struct token*)(tokens->first->data))->type;
+
+ }
+
+ struct token* get_next_token(struct Source_File *src,struct Program *prog,struct automata_entry *start_state)
+ {
+ int temp;
+ size_t current_size;
+
+ struct token *ret;
+ struct automata_entry *current_state;
+ struct automata_entry *best_state;
+
+ current_size=0;
+ best_state=current_state=start_state;
+
+ /*check for double slash comment*/
+ if(src->where_in_src<src->src_size-1 && src->src[src->where_in_src]=='/' && src->src[src->where_in_src+1]=='/')
+ {
+ ret=malloc(sizeof(struct token));
+ ret->type=KW_COMMENT;
+ ret->data=src->src + src->where_in_src;
+ src->where_in_src+=2;
+ while(src->where_in_src!=src->src_size && src->src[src->where_in_src]!='\n')
+ {
+ if(src->where_in_src<src->src_size-1 && src->src[src->where_in_src]=='\\' && src->src[src->where_in_src+1]=='\n')
+ {
+ src->where_in_src+=2;
+ }else
+ {
+ ++src->where_in_src;
+ }
+ }
+
+ }
+ /*ignore leading spaces and tabs and check for double slash comment*/
+ while(src->src[src->where_in_src]==' ' || src->src[src->where_in_src]=='\n' || src->src[src->where_in_src]=='\t')
+ {
+ if(src->src[src->where_in_src]=='\n')
+ {
+ src->which_column=0;
+ ++src->which_row;
+ }else if(src->src[src->where_in_src]=='\t')
+ {
+ src->which_row+=5;
+ }
+ ++src->where_in_src;
+ }
+
+ while(src->src[src->where_in_src]!='\0')
+ {
+
+ if(src->where_in_src<src->src_size-1 && src->src[src->where_in_src]=='\\' && src->src[src->where_in_src+1]=='\n')
+ {
+ src->where_in_src+=2;
+ current_size+=2;
+ }
+
+ current_state=current_state->delta[cmpr[src->src[src->where_in_src]]];
+ if(current_state==NULL)
+ {
+ if(best_state->type==KW_COMMENT || best_state->type==PKW_COMMENT)
+ {
+ current_size=0;
+ best_state=current_state=start_state;
+ }else
+ {
+ ret=malloc(sizeof(struct token));
+ ret->type=best_state->type;
+ ret->data_size=current_size;
+ ret->column=src->which_column;
+ ret->line=src->which_row;
+ ret->data=src->src+(src->where_in_src-current_size);
+ handle_splicing(ret);
+ return ret;
+ }
+
+ }else
+ {
+ if(current_state->is_final)
+ {
+ best_state=current_state;
+ }
+ ++current_size;
+ ++src->where_in_src;
+ ++src->which_column;
+ }
+ }
+ ret=malloc(sizeof(struct token));
+ ret->type=KW_NOTYPE;
+ ret->data_size=0;
+
+ return ret;
+ }
+ #endif
F diff --git a/lex/lexer.h b/lex/lexer.h
new file mode 100644
--- /dev/null
+++ b/lex/lexer.h
+ #ifndef LEXER_H
+ #define LEXER_H LEXER_H
+ #include <lexer.hh>
+ #include <stdio.h>
+ #include <chonky.h>
+ #include <chonky_jr.h>
+ #include <queue.h>
+ #include <program.h>
+ struct token
+ {
+ enum KEYWORDS type;
+ size_t data_size;
+ char *data;
+ size_t line,column;
+ };
+
+ struct token_vector
+ {
+ struct token *tokens;
+ size_t size;
+ };
+
+ struct define_directive
+ {
+ struct token *macro_name;
+ struct Queue replacement_list;
+ /*the tokens of the macro (contains a special token)*/
+ struct Queue id_list;
+
+ struct Map arguments;
+ size_t number_of_arguments;
+ /*put arguments here*/
+ struct token **argument_list;
+ };
+
+
+
+
+ struct Queue* lex(struct Source_File *src,struct Program *prog);
+ struct token* get_next_token(struct Source_File *src,struct Program *prog,struct automata_entry *start_state);
+ struct token_vector Lex_Queue_Condense(struct Queue *tokens);
+ char check(struct Queue *tokens,enum KEYWORDS kw,size_t ahead);
+ char get_and_check(struct Queue *tokens,enum KEYWORDS kw);
+ char get_and_check_unsafe(struct Queue *tokens,enum KEYWORDS kw);
+ void chomp(struct Queue *tokens);
+ enum KEYWORDS kw_get(struct Queue *tokens);
+
+
+ /*I know, i know*/
+ void do_preproc_stuff(struct Source_File *src,struct Program *prog);
+ void do_include_stuff(struct Source_File *src,struct Program *prog);
+ void do_define_stuff(struct Source_File *src,struct Program *prog);
+ void handle_splicing(struct token *word);
+ struct define_directive* get_define_directive(struct token* macro_name);
+ #endif
F diff --git a/lex/lexer.hh b/lex/lexer.hh
new file mode 100644
--- /dev/null
+++ b/lex/lexer.hh
+ #ifndef LEXER_HH
+ #define LEXER_HH LEXER_HH
+
+ /*struct declarations. Definitions are in .h*/
+ struct token;
+ struct token_vector;
+ struct define_directive;
+
+ #endif
F diff --git a/lex/preprocessing.c b/lex/preprocessing.c
new file mode 100644
--- /dev/null
+++ b/lex/preprocessing.c
+ #ifndef GCC_PREPROCESSING_C
+ #define GCC_PREPROCESSING_C GCC_PREPROCESSING_C
+ #include "preprocessing.h"
+
+
+ #endif
F diff --git a/lex/preprocessing.h b/lex/preprocessing.h
new file mode 100644
--- /dev/null
+++ b/lex/preprocessing.h
+ #ifndef GCC_PREPROCESSING_C
+ #define GCC_PREPROCESSING_C GCC_PREPROCESSING_C
+
+
+
+ #endif
F diff --git a/lexer.c b/lexer.c
deleted file mode 100644
--- a/lexer.c
+++ /dev/null
- #ifndef LEXER_C
- #define LEXER_C LEXER_C
- #include "lexer.h"
-
- struct Queue* lex(struct Source_File *src,struct Program *prog)
- {
-
-
- struct token *current_token;
- struct Queue *tokens;
-
- tokens=malloc(sizeof(struct Queue));
- Queue_Init(tokens);
- while(src->src[src->where_in_src]!='\0')
- {
-
- if(src->which_column==0 && src->src[src->where_in_src]=='#')
- {
- /*todo preprocesing*/
- ++src->where_in_src;
- ++src->which_column;
- do_preproc_stuff(src,prog);
- }else
- {
- current_token=get_next_token(src,prog,&chonky[0]);
- if(current_token->type!=KW_NOTYPE)
- Queue_Push(tokens,current_token);
- else
- free(current_token);
- }
- }
-
-
- return tokens;
-
- }
-
- /*we have skipped the leading #*/
- /*
- #include string
- #include <qchar>
- #define [ id(list) replacement
- #line number [string]
- #if
- #ifdef
- #ifndef
- #pragma
- #error
- #
-
- these should be seperated from the ifs
- #elif
- #else
- #endif
-
-
- */
- void do_preproc_stuff(struct Source_File *src,struct Program *prog)
- {
- struct token *hold;
- hold=get_next_token(src,prog,&chonky_jr[0]);
- switch(hold->type)
- {
- case PKW_INCLUDE:
- free(hold);
- do_include_stuff(src,prog);
- return;
- case PKW_DEFINE:
- free(hold);
- do_define_stuff(src,prog);
-
-
- default:
- return;
- /*TODO error*/
-
- }
- }
-
- void do_include_stuff(struct Source_File *src,struct Program *prog)
- {
- struct token *hold;
- hold=get_next_token(src,prog,&chonky[0]);
- if(hold->type==KW_STRING)
- {
- hold->data[hold->data_size-1]='\0';
- hold->data_size-=2;
- ++hold->data;
- handle_splicing(hold);
- lex_program(hold->data,prog);
- free(hold);
- }else if(hold->type==KW_LESS)/*hack*/
- {
- ++hold->data;
- while(src->src[src->where_in_src]!='>')
- {
- ++src->where_in_src;
- ++hold->data_size;
- }
- /*skip the >*/
- ++src->where_in_src;
- hold->data[hold->data_size-1]='\0';
- handle_splicing(hold);
-
- lex_program(hold->data,prog);
- free(hold);
-
- }else
- {
- /*TODO error*/
- return;
- }
- }
- struct define_directive* get_define_directive(struct token* macro_name)
- {
- struct define_directive* ret;
- ret=malloc(sizeof(struct define_directive));
- ret->macro_name=macro_name;
-
- Queue_Init(&ret->replacement_list);
- Queue_Init(&ret->id_list);
- ret->number_of_arguments=0;
- Map_Init(&ret->arguments);
- return ret;
- }
- /*
- id[(list)] tokens \n
- */
- void do_define_stuff(struct Source_File *src,struct Program *prog)
- {
- struct token *hold;
- struct define_directive *macro;
- hold=get_next_token(src,prog,&chonky[0]);
- if(hold->type==KW_ID)
- {
- macro=get_define_directive(hold);
- Map_Push(&prog->defines,hold->data,hold->data_size,macro);
- hold=get_next_token(src,prog,&chonky[0]);
- }else
- {
- /*TODO error*/
- return;
- }
- }
-
-
-
- /*hack*/
- void handle_splicing(struct token *word)
- {
- size_t back;
- size_t front;
- front=0;
- for(front;front<word->data_size-1;++front)
- {
- if(word->data[front]=='\\' && word->data[front+1]=='\n')
- {
- front+=2;
- break;
- }
- }
- if(front==word->data_size-1)
- return;
-
- for(back=front-2;front<word->data_size-1;)
- {
- if(word->data[front]=='\\' && word->data[front+1]=='\n')
- {
- front+=2;
- }else
- {
- word->data[back]=word->data[front];
- ++front;
- ++back;
- }
- }
- word->data[back]=word->data[front];
- }
- struct token_vector Lex_Queue_Condense(struct Queue *tokens)
- {
- size_t i;
- struct token_vector ret;
- struct token *hold;
-
- ret.tokens=malloc(sizeof(struct token)*tokens->size);
- ret.size=tokens->size;
-
- for(i=0;tokens->size>0;++i)
- {
- hold=Queue_Pop(tokens);
- ret.tokens[i]=*hold;
- free(hold);
- }
-
- Queue_Destroy(tokens);
-
- return ret;
- }
-
- char check(struct Queue *tokens,enum KEYWORDS kw,size_t ahead)
- {
- size_t i;
- struct Queue_Node *current;
- if(tokens->size<=ahead)
- {
- return 0;
- }else
- {
- for(i=0,current=tokens->first;i<ahead;++i,current=current->prev);
-
- if( ((struct token*)(current->data))->type == kw )
- {
- return 1;
- }else
- {
- return 0;
- }
- }
- }
- char get_and_check(struct Queue *tokens,enum KEYWORDS kw)
- {
- struct token *hold_token;
- if(tokens->size==0)
- {
- return 0;
- }else
- {
- hold_token=tokens->first->data;
- if(hold_token->type!=kw)
- {
- return 0;
- }else
- {
- hold_token=Queue_Pop(tokens);
- free(hold_token);
- return 1;
- }
- }
- }
- char get_and_check_unsafe(struct Queue *tokens,enum KEYWORDS kw)
- {
- struct token *hold_token;
- hold_token=tokens->first->data;
- if(hold_token->type!=kw)
- {
- return 0;
- }else
- {
- hold_token=Queue_Pop(tokens);
- free(hold_token);
- return 1;
- }
- }
- void chomp(struct Queue *tokens)
- {
- free(Queue_Pop(tokens));
- }
-
- enum KEYWORDS kw_get(struct Queue *tokens)
- {
- if(tokens->size==0)
- return KW_NOTYPE;
- return ((struct token*)(tokens->first->data))->type;
-
- }
-
- struct token* get_next_token(struct Source_File *src,struct Program *prog,struct automata_entry *start_state)
- {
- int temp;
- size_t current_size;
-
- struct token *ret;
- struct automata_entry *current_state;
- struct automata_entry *best_state;
-
- current_size=0;
- best_state=current_state=start_state;
-
- /*check for double slash comment*/
- if(src->where_in_src<src->src_size-1 && src->src[src->where_in_src]=='/' && src->src[src->where_in_src+1]=='/')
- {
- ret=malloc(sizeof(struct token));
- ret->type=KW_COMMENT;
- ret->data=src->src + src->where_in_src;
- src->where_in_src+=2;
- while(src->where_in_src!=src->src_size && src->src[src->where_in_src]!='\n')
- {
- if(src->where_in_src<src->src_size-1 && src->src[src->where_in_src]=='\\' && src->src[src->where_in_src+1]=='\n')
- {
- src->where_in_src+=2;
- }else
- {
- ++src->where_in_src;
- }
- }
-
- }
- /*ignore leading spaces and tabs and check for double slash comment*/
- while(src->src[src->where_in_src]==' ' || src->src[src->where_in_src]=='\n' || src->src[src->where_in_src]=='\t')
- {
- if(src->src[src->where_in_src]=='\n')
- {
- src->which_column=0;
- ++src->which_row;
- }else if(src->src[src->where_in_src]=='\t')
- {
- src->which_row+=5;
- }
- ++src->where_in_src;
- }
-
- while(src->src[src->where_in_src]!='\0')
- {
-
- if(src->where_in_src<src->src_size-1 && src->src[src->where_in_src]=='\\' && src->src[src->where_in_src+1]=='\n')
- {
- src->where_in_src+=2;
- current_size+=2;
- }
-
- current_state=current_state->delta[cmpr[src->src[src->where_in_src]]];
- if(current_state==NULL)
- {
- if(best_state->type==KW_COMMENT || best_state->type==PKW_COMMENT)
- {
- current_size=0;
- best_state=current_state=start_state;
- }else
- {
- ret=malloc(sizeof(struct token));
- ret->type=best_state->type;
- ret->data_size=current_size;
- ret->column=src->which_column;
- ret->line=src->which_row;
- ret->data=src->src+(src->where_in_src-current_size);
- handle_splicing(ret);
- return ret;
- }
-
- }else
- {
- if(current_state->is_final)
- {
- best_state=current_state;
- }
- ++current_size;
- ++src->where_in_src;
- ++src->which_column;
- }
- }
- ret=malloc(sizeof(struct token));
- ret->type=KW_NOTYPE;
- ret->data_size=0;
-
- return ret;
- }
- #endif
F diff --git a/lexer.h b/lexer.h
deleted file mode 100644
--- a/lexer.h
+++ /dev/null
- #ifndef LEXER_H
- #define LEXER_H LEXER_H
- #include "lexer.hh"
- #include<stdio.h>
- #include "chonky.h"
- #include "chonky_jr.h"
- #include "queue.h"
- #include "program.h"
- struct token
- {
- enum KEYWORDS type;
- size_t data_size;
- char *data;
- size_t line,column;
- };
-
- struct token_vector
- {
- struct token *tokens;
- size_t size;
- };
-
- struct define_directive
- {
- struct token *macro_name;
- struct Queue replacement_list;
- /*the tokens of the macro (contains a special token)*/
- struct Queue id_list;
-
- struct Map arguments;
- size_t number_of_arguments;
- /*put arguments here*/
- struct token **argument_list;
- };
-
-
-
-
- struct Queue* lex(struct Source_File *src,struct Program *prog);
- struct token* get_next_token(struct Source_File *src,struct Program *prog,struct automata_entry *start_state);
- struct token_vector Lex_Queue_Condense(struct Queue *tokens);
- char check(struct Queue *tokens,enum KEYWORDS kw,size_t ahead);
- char get_and_check(struct Queue *tokens,enum KEYWORDS kw);
- char get_and_check_unsafe(struct Queue *tokens,enum KEYWORDS kw);
- void chomp(struct Queue *tokens);
- enum KEYWORDS kw_get(struct Queue *tokens);
-
-
- /*I know, i know*/
- void do_preproc_stuff(struct Source_File *src,struct Program *prog);
- void do_include_stuff(struct Source_File *src,struct Program *prog);
- void do_define_stuff(struct Source_File *src,struct Program *prog);
- void handle_splicing(struct token *word);
- struct define_directive* get_define_directive(struct token* macro_name);
- #endif
F diff --git a/lexer.hh b/lexer.hh
deleted file mode 100644
--- a/lexer.hh
+++ /dev/null
- #ifndef LEXER_HH
- #define LEXER_HH LEXER_HH
-
- /*struct declarations. Definitions are in .h*/
- struct token;
- struct token_vector;
- struct define_directive;
-
- #endif
F diff --git a/location.c b/location.c
deleted file mode 100644
--- a/location.c
+++ /dev/null
- #ifndef GCC_LOCATION_C
- #define GCC_LOCATION_C GCC_LOCATION_C
- #include "location.h"
-
-
- struct Location_Stack* get_location_on_stack(size_t offset)
- {
- struct Location_Stack *ret;
- ret=malloc(sizeof(struct Location_Stack));
- ret->type=LT_ON_STACK;
- ret->offset=offset;
-
- return ret;
- }
- struct Location_Raw* get_location_raw(size_t address)
- {
- struct Location_Raw *ret;
- ret=malloc(sizeof(struct Location_Raw));
- ret->type=LT_RAW;
- ret->address=address;
-
- return ret;
- }
-
- struct Location_Relative* get_relative_location(struct Location *base,size_t offset)
- {
- struct Location_Relative *ret;
- ret=malloc(sizeof(struct Location_Relative));
- ret->type=LT_RELATIVE;
- ret->base=base;
- ret->offset=offset;
-
- return ret;
- }
- /*base is modified*/
- struct Location *get_location_for_denoted_object(struct Location *base,struct Type *type,struct token *id)
- {
- if(base->type==LT_ON_STACK)
- {
- struct Location_Stack *hold;
- hold=malloc(sizeof(struct Location_Stack));
- *hold=*(struct Location_Stack*)base;
- ((struct Location_Stack*)base)->offset+=get_type_size(type);
-
- return (struct Location*)hold;
- }else if(base->type==LT_RELATIVE)
- {
- struct Location_Relative *hold;
-
- hold=malloc(sizeof(struct Location_Relative));
- *hold=*(struct Location_Relative*)base;
-
- return (struct Location*)hold;
- }else if(base->type==LT_GLOBAL)
- {
- struct Location_Labeled *hold;
- hold=malloc(sizeof(struct Location_Labeled));
- hold->id=id;
-
- return (struct Location*)hold;
- }
- }
- struct Location *get_global_location()
- {
- struct Location *ret;
- ret=malloc(sizeof(struct Location));
- ret->type=LT_GLOBAL;
-
- return ret;
- }
- #endif
F diff --git a/location.h b/location.h
deleted file mode 100644
--- a/location.h
+++ /dev/null
- #ifndef GCC_LOCATION_H
- #define GCC_LOCATION_H GCC_LOCATION_H
- #include "location.hh"
- #include "lexer.h"
- #include "type.h"
-
-
- enum Location_Type;
- struct Location
- {
- enum Location_Type type;
- };
- struct Location_Stack
- {
- enum Location_Type type;
- size_t offset;
- };
- struct Location_Raw
- {
- enum Location_Type type;
- size_t address;
- };
-
- struct Location_Relative
- {
- enum Location_Type type;
- struct Location *base;
- size_t offset;
- };
-
- struct Location_Labeled
- {
- enum Location_Type type;
- struct token *id;
- };
-
- struct Location_Stack* get_location_on_stack(size_t offset);
- struct Location* get_global_location();
- struct Location_Raw* get_location_raw(size_t address);
- struct Location_Relative* get_relative_location(struct Location *base,size_t offset);
- struct Location* get_location_for_denoted_object(struct Location *base,struct Type *type,struct token *id);
-
- #endif
F diff --git a/location.hh b/location.hh
deleted file mode 100644
--- a/location.hh
+++ /dev/null
- #ifndef GCC_LOCATION_HH
- #define GCC_LOCATION_HH GCC_LOCATION_HH
- enum Location_Type
- {
- LT_ON_STACK,
- LT_RAW,
- LT_RELATIVE,
- LT_LABELED,
- LT_GLOBAL
- };
- struct Location;
- struct Location_Stack;
- struct Location_Raw;
- struct Location_Relative;
- struct Location_Labeled;
-
- #endif
F diff --git a/main.c b/main.c
--- a/main.c
+++ b/main.c
#include<stdio.h>
#include<stdlib.h>
- #include "all.h"
+
+ #include <all.h>
F diff --git a/makefile b/makefile
deleted file mode 100644
--- a/makefile
+++ /dev/null
- .PHONY: run clean clear debug rm rn
- objects = ast.o chonky.o chonky_jr.o denoted.o lexer.o location.o map.o parse_declaration.o parse_expression.o parse_statement.o parse_translation_unit.o preprocessing.o print.o program.o queue.o scope.o semantics.o stack.o type.o main.o
- CC=gcc
- CFLAGS="-g"
- wonky: ${objects}
- ${CC} ${CFLAGS} *.o -o wonky
- run: wonky
- ./wonky
- main.o: main.c
- ${CC} ${CFLAGS} -c main.c -o main.o
- ast.o: ast.c ast.h
- ${CC} ${CFLAGS} -c ast.c -o ast.o
- chonky.o: chonky.c
- ${CC} ${CFLAGS} -c chonky.c -o chonky.o
- chonky_jr.o: chonky_jr.c
- ${CC} ${CFLAGS} -c chonky_jr.c -o chonky_jr.o
- denoted.o: denoted.c denoted.h
- ${CC} ${CFLAGS} -c denoted.c -o denoted.o
- lexer.o: lexer.c lexer.h
- ${CC} ${CFLAGS} -c lexer.c -o lexer.o
- location.o: location.c location.h
- ${CC} ${CFLAGS} -c location.c -o location.o
- parse_declaration.o: parse_declaration.c parse_declaration.h
- ${CC} ${CFLAGS} -c parse_declaration.c -o parse_declaration.o
- parse_expression.o: parse_expression.c parse_expression.h
- ${CC} ${CFLAGS} -c parse_expression.c -o parse_expression.o
- parse_statement.o: parse_statement.c parse_statement.h
- ${CC} ${CFLAGS} -c parse_statement.c -o parse_statement.o
- parse_translation_unit.o: parse_translation_unit.c parse_translation_unit.h
- ${CC} ${CFLAGS} -c parse_translation_unit.c -o parse_translation_unit.o
- preprocessing.o: preprocessing.c preprocessing.h
- ${CC} ${CFLAGS} -c preprocessing.c -o preprocessing.o
- print.o: print.c print.h
- ${CC} ${CFLAGS} -c print.c -o print.o
- program.o: program.c program.h
- ${CC} ${CFLAGS} -c program.c -o program.o
- scope.o: scope.c scope.h
- ${CC} ${CFLAGS} -c scope.c -o scope.o
- semantics.o: semantics.c semantics.h
- ${CC} ${CFLAGS} -c semantics.c -o semantics.o
- test2.o: test2.c test2.h
- ${CC} ${CFLAGS} -c test2.c -o test2.o
- test.o: test.c test.h
- ${CC} ${CFLAGS} -c test.c -o test.o
- type.o: type.c type.h
- ${CC} ${CFLAGS} -c type.c -o type.o
- map.o: map.c map.h
- ${CC} ${CFLAGS} -c map.c -o map.o
- queue.o: queue.c queue.h
- ${CC} ${CFLAGS} -c queue.c -o queue.o
- stack.o: stack.c stack.h
- ${CC} ${CFLAGS} -c stack.c -o stack.o
- clean: clear
- clear:
- rm wonky -f &
- rm ./*.temp -f &
- rm ./*.o -f &
- rm ./*.out -f
- debug: wonky
- gdbtui wonky
- rm: run
- rn: run
F diff --git a/map.c b/map.c
deleted file mode 100644
--- a/map.c
+++ /dev/null
- #ifndef GMAP_C
- #define GMAP_C GMAP_C
- #include "map.h"
-
-
-
- /*
- * ID and residue and all of delta is assigned to NULL
- * */
- void Map_Init(Map *tree)
- {
- tree->is_final=0;
- for(int i=0;i<256;++i)tree->delta[i] = NULL;
- tree->ID = NULL;
- }
-
- void Map_Scour(Map *tree,void *str,size_t size,size_t *where,Map **final_node)
- {
- for(where[0]=0,final_node[0]=tree;where[0]<size && final_node[0]->delta[((unsigned char*)str)[ where[0] ]]!=NULL;++where[0])
- {
- (*final_node) = (*final_node)->delta[((unsigned char*)str)[*where]];
- }
- }
-
-
-
- /*
- * tree must not be null
- * */
- void Map_Push(Map *tree,void *str,size_t size,void *id)
- {
- size_t temp;
- Map_Scour(tree,str,size,&temp,&tree);
-
- if(temp == size)
- {
- if(tree->ID!=NULL)tree->ID=id;
- tree->is_final=1;
- return;
- }
- for(temp;temp<size;++temp)
- {
- Map_Init(tree=tree->delta[((unsigned char*)str)[temp]]=malloc(sizeof(Map)));
- }
-
- tree->ID=id;
- tree->is_final=1;
-
- }
-
-
- /*
- * scours the tree and returns the id of the node that recognises the str
- * returns NULL if the string is not recognised
- * */
- void* Map_Check(Map *tree, void *str,size_t size)
- {
- size_t temp;
- Map_Scour(tree,str,size,&temp,&tree);
-
- if(temp<size)
- {
- return NULL;
- }else
- {
- return tree->ID; //this has been set to be the last reached node
- }
- }
-
- void Map_Remove(Map *tree, void *str,size_t size)
- {
- Stack stk;
- Stack_Init(&stk);
- size_t where;
- char what_to_null=((char*)str)[0];
-
- Stack_Push(&stk,tree);
-
- for(where=0;where<size-1 && tree->delta[((unsigned char*)str)[where]]!=NULL;++where)
- {
- tree = tree->delta[((unsigned char*)str)[where]];
- if(tree->is_final==1)
- {
- while(stk.size>0)Stack_Pop(&stk);
- what_to_null=((char*)str)[where+1];
- }
- Stack_Push(&stk,tree);
- }
- if(tree->delta[((unsigned char*)str)[where]] == NULL)return;
- free(tree->delta[((unsigned char*)str)[where]]);
- while(stk.size>1)free(Stack_Pop(&stk));
- tree=(Map*)Stack_Pop(&stk);
- tree->delta[(unsigned char)what_to_null]=NULL;
-
- }
- /*This function especially requires that the map has no loops*/
- void Map_Map(Map *tree,void (*map)(void*))
- {
- if(tree->is_final==1)map(tree->ID);
- for(int i=0;i<256;++i)
- {
- if(tree->delta[i]!=NULL)
- {
- Map_Map(tree->delta[i],map);
- }
- }
- }
-
-
-
- /*this does not destroy(free) any memory pointed to by a node in the Map. This does not free() the root (Map *tree) */
- /*This function especially does not require that the map has no loop ( for example after grepification )*/
- void Map_Destroy(Map *tree)
- {
- Stack path;
- Stack nodes;
- Map *current_node;
- unsigned int i;
-
-
- Stack_Init(&path);
- Stack_Init(&nodes);
-
- Stack_Push(&path,tree);
- Stack_Push(&nodes,tree);
-
- /*
- using DFS we fill up the nodes stack with all the used
- (accessible) nodes.
- */
- while(path.size>0)
- {
- current_node=Stack_Pop(&path);
- current_node->ID=&(current_node->ID);/*mark the node*/
- for(i=0;i<256;++i)
- {
- if(current_node->delta[i]!=NULL && current_node->delta[i]->ID != &(current_node->delta[i]->ID) )
- {
- Stack_Push(&path,current_node->delta[i]);
-
-
- /*we mark the unmarked child of the current_node*/
- current_node->delta[i]->ID=&(current_node->delta[i]->ID);
- /*every node in nodes continues to be marked*/
- Stack_Push(&nodes,current_node->delta[i]);
- }
- }
-
- }
- /*
- There should not be any duplicates in here
- */
- while(nodes.size>1)
- {
- current_node=Stack_Pop(&nodes);
- /*Again the things that ID points to is not freed ( this structure is used to map the structure of data )
- deletion of it is up to you.
- */
- free(current_node);
- }
-
-
- }
-
- /*this isn't c++ i promise :)*/
- /*requres that cpy has no loops*/
- Map* Map_Copy(Map *cpy)
- {
- short i;
- Map *ret;
-
- if(cpy==NULL)
- {
- return NULL;
- }
-
- ret=malloc(sizeof(Map));
- ret->is_final=cpy->is_final;
- ret->ID=cpy->ID;
-
- for(i=0;i<256;++i)
- {
- ret->delta[i]=Map_Copy(cpy->delta[i]);
- }
- return ret;
- }
-
-
- #endif //#ifndef GMAP
F diff --git a/map.h b/map.h
deleted file mode 100644
--- a/map.h
+++ /dev/null
- #ifndef GMAP_H
- #define GMAP_H GMAP_H
- #include<stdlib.h>
- #include<stdio.h>
- #include"stack.h"
- #include"queue.h"
- //#include"../Queue/unique_queue.c"
-
- typedef struct Map Map;
-
-
-
- /*
- * A looples automata with things attached to the nodes
- * */
- struct Map
- {
- char is_final;
- Map *delta[256];
- /*ID cannot point to itself ( this is used in the deletion of the map ) */
- void *ID; //I have integer ids in mind but can be a translation for exmpl.
- };
-
- void Map_Init(Map *tree);
- void Map_Scour(Map *tree,void *str,size_t size,size_t *where,Map **final_node);
- void Map_Push(Map *tree,void *str,size_t size,void *id);
- void* Map_Check(Map *tree, void *str,size_t size);
- void Map_Remove(Map *tree, void *str,size_t size);
- void Map_Map(Map *tree,void (*map)(void*));
- void Map_Destroy(Map *tree);
- struct Condensed_Map* Map_Condense(Map* tree);
- #endif
F diff --git a/misc/all.h b/misc/all.h
new file mode 100644
--- /dev/null
+++ b/misc/all.h
+ #ifndef GCC_ALL
+ #define GCC_ALL GCC_ALL
+
+
+
+ #include <ast.h>
+ #include <denoted.h>
+ #include <lexer.h>
+ #include <location.h>
+ #include <parse_declaration.h>
+ #include <parse_expression.h>
+ #include <parse_statement.h>
+ #include <parse_translation_unit.h>
+ #include <preprocessing.h>
+ #include <program.h>
+ #include <scope.h>
+ #include <semantics.h>
+ #include <type.h>
+
+ #include <queue.h>
+ #include <map.h>
+ #include <stack.h>
+
+ #include <print.h>
+
+
+ #endif
F diff --git a/misc/map.c b/misc/map.c
new file mode 100644
--- /dev/null
+++ b/misc/map.c
+ #ifndef GMAP_C
+ #define GMAP_C GMAP_C
+ #include "map.h"
+
+
+
+ /*
+ * ID and residue and all of delta is assigned to NULL
+ * */
+ void Map_Init(Map *tree)
+ {
+ tree->is_final=0;
+ for(int i=0;i<256;++i)tree->delta[i] = NULL;
+ tree->ID = NULL;
+ }
+
+ void Map_Scour(Map *tree,void *str,size_t size,size_t *where,Map **final_node)
+ {
+ for(where[0]=0,final_node[0]=tree;where[0]<size && final_node[0]->delta[((unsigned char*)str)[ where[0] ]]!=NULL;++where[0])
+ {
+ (*final_node) = (*final_node)->delta[((unsigned char*)str)[*where]];
+ }
+ }
+
+
+
+ /*
+ * tree must not be null
+ * */
+ void Map_Push(Map *tree,void *str,size_t size,void *id)
+ {
+ size_t temp;
+ Map_Scour(tree,str,size,&temp,&tree);
+
+ if(temp == size)
+ {
+ if(tree->ID!=NULL)tree->ID=id;
+ tree->is_final=1;
+ return;
+ }
+ for(temp;temp<size;++temp)
+ {
+ Map_Init(tree=tree->delta[((unsigned char*)str)[temp]]=malloc(sizeof(Map)));
+ }
+
+ tree->ID=id;
+ tree->is_final=1;
+
+ }
+
+
+ /*
+ * scours the tree and returns the id of the node that recognises the str
+ * returns NULL if the string is not recognised
+ * */
+ void* Map_Check(Map *tree, void *str,size_t size)
+ {
+ size_t temp;
+ Map_Scour(tree,str,size,&temp,&tree);
+
+ if(temp<size)
+ {
+ return NULL;
+ }else
+ {
+ return tree->ID; //this has been set to be the last reached node
+ }
+ }
+
+ void Map_Remove(Map *tree, void *str,size_t size)
+ {
+ Stack stk;
+ Stack_Init(&stk);
+ size_t where;
+ char what_to_null=((char*)str)[0];
+
+ Stack_Push(&stk,tree);
+
+ for(where=0;where<size-1 && tree->delta[((unsigned char*)str)[where]]!=NULL;++where)
+ {
+ tree = tree->delta[((unsigned char*)str)[where]];
+ if(tree->is_final==1)
+ {
+ while(stk.size>0)Stack_Pop(&stk);
+ what_to_null=((char*)str)[where+1];
+ }
+ Stack_Push(&stk,tree);
+ }
+ if(tree->delta[((unsigned char*)str)[where]] == NULL)return;
+ free(tree->delta[((unsigned char*)str)[where]]);
+ while(stk.size>1)free(Stack_Pop(&stk));
+ tree=(Map*)Stack_Pop(&stk);
+ tree->delta[(unsigned char)what_to_null]=NULL;
+
+ }
+ /*This function especially requires that the map has no loops*/
+ void Map_Map(Map *tree,void (*map)(void*))
+ {
+ if(tree->is_final==1)map(tree->ID);
+ for(int i=0;i<256;++i)
+ {
+ if(tree->delta[i]!=NULL)
+ {
+ Map_Map(tree->delta[i],map);
+ }
+ }
+ }
+
+
+
+ /*this does not destroy(free) any memory pointed to by a node in the Map. This does not free() the root (Map *tree) */
+ /*This function especially does not require that the map has no loop ( for example after grepification )*/
+ void Map_Destroy(Map *tree)
+ {
+ Stack path;
+ Stack nodes;
+ Map *current_node;
+ unsigned int i;
+
+
+ Stack_Init(&path);
+ Stack_Init(&nodes);
+
+ Stack_Push(&path,tree);
+ Stack_Push(&nodes,tree);
+
+ /*
+ using DFS we fill up the nodes stack with all the used
+ (accessible) nodes.
+ */
+ while(path.size>0)
+ {
+ current_node=Stack_Pop(&path);
+ current_node->ID=&(current_node->ID);/*mark the node*/
+ for(i=0;i<256;++i)
+ {
+ if(current_node->delta[i]!=NULL && current_node->delta[i]->ID != &(current_node->delta[i]->ID) )
+ {
+ Stack_Push(&path,current_node->delta[i]);
+
+
+ /*we mark the unmarked child of the current_node*/
+ current_node->delta[i]->ID=&(current_node->delta[i]->ID);
+ /*every node in nodes continues to be marked*/
+ Stack_Push(&nodes,current_node->delta[i]);
+ }
+ }
+
+ }
+ /*
+ There should not be any duplicates in here
+ */
+ while(nodes.size>1)
+ {
+ current_node=Stack_Pop(&nodes);
+ /*Again the things that ID points to is not freed ( this structure is used to map the structure of data )
+ deletion of it is up to you.
+ */
+ free(current_node);
+ }
+
+
+ }
+
+ /*this isn't c++ i promise :)*/
+ /*requres that cpy has no loops*/
+ Map* Map_Copy(Map *cpy)
+ {
+ short i;
+ Map *ret;
+
+ if(cpy==NULL)
+ {
+ return NULL;
+ }
+
+ ret=malloc(sizeof(Map));
+ ret->is_final=cpy->is_final;
+ ret->ID=cpy->ID;
+
+ for(i=0;i<256;++i)
+ {
+ ret->delta[i]=Map_Copy(cpy->delta[i]);
+ }
+ return ret;
+ }
+
+
+ #endif //#ifndef GMAP
F diff --git a/misc/map.h b/misc/map.h
new file mode 100644
--- /dev/null
+++ b/misc/map.h
+ #ifndef GMAP_H
+ #define GMAP_H GMAP_H
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <stack.h>
+ #include <queue.h>
+ //#include"../Queue/unique_queue.c"
+
+ typedef struct Map Map;
+
+
+
+ /*
+ * A looples automata with things attached to the nodes
+ * */
+ struct Map
+ {
+ char is_final;
+ Map *delta[256];
+ /*ID cannot point to itself ( this is used in the deletion of the map ) */
+ void *ID; //I have integer ids in mind but can be a translation for exmpl.
+ };
+
+ void Map_Init(Map *tree);
+ void Map_Scour(Map *tree,void *str,size_t size,size_t *where,Map **final_node);
+ void Map_Push(Map *tree,void *str,size_t size,void *id);
+ void* Map_Check(Map *tree, void *str,size_t size);
+ void Map_Remove(Map *tree, void *str,size_t size);
+ void Map_Map(Map *tree,void (*map)(void*));
+ void Map_Destroy(Map *tree);
+ struct Condensed_Map* Map_Condense(Map* tree);
+ #endif
F diff --git a/misc/print.c b/misc/print.c
new file mode 100644
--- /dev/null
+++ b/misc/print.c
+ #ifndef GCC_PRINT
+ #define GCC_PRINT GCC_PRINT
+ #include "print.h"
+
+
+
+
+
+ void print_token(FILE *out,struct token *token)
+ {
+ size_t i;
+ // fprintf(out,"[");
+ for(i=0;i<token->data_size;++i)
+ {
+ fprintf(out,"%c",token->data[i]);
+ }
+ // fprintf(out,"]");
+ }
+
+ void print_tokens(FILE *out,struct Queue *tokens)
+ {
+ struct Queue_Node *it;
+ for( it=tokens->first;
+ it!=tokens->last;
+ it=it->prev)
+ {
+ fprintf(out,"[");
+ print_keyword_enum(out,((struct token*)(it->data))->type);
+ print_token(out,(struct token*)(it->data));
+ fprintf(out,"] ");
+ }
+ if(it!=NULL)
+ {
+ print_token(out,(struct token*)(it->data));
+ }
+ }
+
+ void print_ast_enum(FILE *out,enum AST_Type op)
+ {
+ switch(op)
+ {
+ case OP_COMMA:
+ fprintf(out,",");break;
+ case OP_ADDITION:
+ fprintf(out,"+");break;
+ case OP_SUBTRACTION:
+ fprintf(out,"-");break;
+ case OP_MUL:
+ fprintf(out,"*");break;
+ case OP_DIV:
+ fprintf(out,"/");break;
+ case OP_REMAINDER:
+ fprintf(out,"%");break;
+ case OP_COND:
+ fprintf(out,"CONDITIONAL");break;
+ case OP_FUNCTION:
+ fprintf(out,"FUNCTION_CALL");break;
+ case OP_ASSIGN:
+ fprintf(out,"=");break;
+ case OP_ADD_ASSIGN:
+ fprintf(out,"&=");break;
+ case OP_SUBTRACT_ASSIGN:
+ fprintf(out,"-=");break;
+ case OP_MULTIPLY_ASSIGN:
+ fprintf(out,"*=");break;
+ case OP_REMAINDER_ASSIGN:
+ fprintf(out,"%=");break;
+ case OP_DIV_ASSIGN:
+ fprintf(out,"/=");break;
+ case OP_SHIFT_LEFT_ASSIGN:
+ fprintf(out,">>=");break;
+ case OP_SHIFT_RIGHT_ASSIGN:
+ fprintf(out,"<<=");break;
+ case OP_AND_ASSIGN:
+ fprintf(out,"&=");break;
+ case OP_XOR_ASSIGN:
+ fprintf(out,"^=");break;
+ case OP_PIPE_ASSIGN:
+ fprintf(out,"|=");break;
+ case OP_NOP:
+ fprintf(out,"NOP");break;
+ case OP_LOGICAL_OR:
+ fprintf(out,"||");break;
+ case OP_LOGICAL_AND:
+ fprintf(out,"&&");break;
+ case OP_LOGICAL_NOT:
+ fprintf(out,"!");break;
+ case OP_BITWISE_OR:
+ fprintf(out,"|");break;
+ case OP_BITWISE_AND:
+ fprintf(out,"&");break;
+ case OP_BITWISE_XOR:
+ fprintf(out,"^");break;
+ case OP_BITWISE_NOT:
+ fprintf(out,"~");break;
+ case OP_ADDR_OF:
+ fprintf(out,"&");break;
+ case OP_DEREFERENCE:
+ fprintf(out,"*");break;
+ case OP_MEMBER_TROUGH_PTR:
+ fprintf(out,"->");break;
+ case OP_MEMBER:
+ fprintf(out,".");break;
+ case OP_ARR_SUBSCRIPT:
+ fprintf(out,"ARR_SUBSCRIPT");break;
+ case OP_POSTFIX_INC:
+ fprintf(out,"++");break;
+ case OP_POSTFIX_DEC:
+ fprintf(out,"--");break;
+ case OP_PREFIX_INC:
+ fprintf(out,"++");break;
+ case OP_PREFIX_DEC:
+ fprintf(out,"--");break;
+ case OP_UNARY_PLUS:
+ fprintf(out,"+");break;
+ case OP_UNARY_MINUS:
+ fprintf(out,"-");break;
+ case OP_CAST:
+ fprintf(out,"CAST");break;
+ case OP_SIZEOF:
+ fprintf(out,"sizeof");break;
+ case OP_SHIFT_LEFT:
+ fprintf(out,"<<");break;
+ case OP_SHIFT_RIGHT:
+ fprintf(out,">>");break;
+ case OP_LESS_EQ:
+ fprintf(out,"<=");break;
+ case OP_GREATER_EQ:
+ fprintf(out,">=");break;
+ case OP_LESS:
+ fprintf(out,"<");break;
+ case OP_GREATER:
+ fprintf(out,">");break;
+ case OP_EQUAL:
+ fprintf(out,"==");break;
+ case OP_NOT_EQUAL:
+ fprintf(out,"!=");break;
+ case OP_LVALUE:
+ fprintf(out,"LVALUE");break;
+ case OP_RVALUE:
+ fprintf(out,"RVALUE");break;
+ case ST_COMPOUND:
+ fprintf(out,"COMPOUND");break;
+ case ST_EXPRESSION:
+ fprintf(out,"EXPRESSION");break;
+ case ST_SWITCH:
+ fprintf(out,"switch");break;
+ case ST_IF:
+ fprintf(out,"if");break;
+ case ST_WHILE:
+ fprintf(out,"while");break;
+ case ST_DO_WHILE:
+ fprintf(out,"do_while");break;
+ case ST_GOTO:
+ fprintf(out,"goto");break;
+ case ST_LABEL:
+ fprintf(out,"LABEL");break;
+ case ST_CASE:
+ fprintf(out,"case");break;
+ case ST_DEFAULT:
+ fprintf(out,"default");break;
+ case ST_CONTINUE:
+ fprintf(out,"continue");break;
+ case ST_BREAK:
+ fprintf(out,"break");break;
+ case ST_RETURN:
+ fprintf(out,"return");break;
+ case ST_FOR:
+ fprintf(out,"for");break;
+
+ /*TODO obj dec obj def func decl*/
+ case ST_FUNCTION_DEFINITION:
+ fprintf(out,"FUNCTION_DEFINITION");break;
+ case TRANSLATION_UNIT:
+ fprintf(out,"TRANSLATION_UNIT");break;
+ case ERROR:
+ fprintf(out,"ERROR");break;
+ default:
+ fprintf(out,"NOT_POSSIBLE");break;
+ }
+ }
+
+ void print_error_tree(FILE *out,struct AST_Error *error)
+ {
+ fprintf(out,"ERROR");
+ if(error->error!=NULL)
+ {
+ print_ast(out,error->error);
+ }
+ }
+ void print_binary_expression_tree(FILE *out,struct AST_Binary_Expression *bin)
+ {
+ if(bin->type==OP_ARR_SUBSCRIPT)
+ {
+ print_ast(out,bin->left);
+ fprintf(out,"[");
+ print_ast(out,bin->right);
+ fprintf(out,"]");
+ }else
+ {
+ fprintf(out,"(");
+ print_ast(out,bin->left);
+ print_ast_enum(out,bin->type);
+ print_ast(out,bin->right);
+ fprintf(out,")");
+ }
+ }
+ void print_conditional_expression_tree(FILE *out,struct AST_Conditional_Expression *cond)
+ {
+ fprintf(out,"(");
+ print_ast(out,cond->left);
+ fprintf(out,"?");
+ print_ast(out,cond->center);
+ fprintf(out,":");
+ print_ast(out,cond->right);
+ fprintf(out,")");
+ }
+ void print_function_expression_tree(FILE *out,struct AST_Function_Expression *function_call)
+ {
+ struct Queue_Node *it;
+ print_ast(out,function_call->id);
+ fprintf(out,"(");
+ if(function_call->arguments.size>0)
+ {
+ fprintf(out,"\n");
+ for(it=function_call->arguments.first;it!=function_call->arguments.last;it=it->prev)
+ {
+ print_ast(out,(struct AST*)(it->data));
+ fprintf(out,",\n");
+ }
+ if(it!=NULL)
+ {
+ print_ast(out,(struct AST*)(it->data));
+ }
+
+ }
+ fprintf(out,")");
+ }
+ void print_unary_expression_tree(FILE *out,struct AST_Unary_Expression *unary_expression)
+ {
+ print_ast_enum(out,unary_expression->type);
+ if(unary_expression->type==OP_CAST)
+ {
+ fprintf(out,"(");
+ print_type(out,unary_expression->value_type,1);
+ fprintf(out,")");
+ }
+ print_ast(out,unary_expression->operand);
+ }
+ void print_rvalue_expression_tree(FILE *out,struct AST_Rvalue_Expression *rval)
+ {
+ print_token(out,rval->id);
+ }
+ void print_lvalue_expression_tree(FILE *out,struct AST_Lvalue_Expression *lval)
+ {
+ print_token(out,lval->id);
+ }
+ void print_labeled_statement_tree(FILE *out,struct AST_Labeled_Statement *lab)
+ {
+ if(lab->type!=ST_LABEL)
+ print_ast_enum(out,lab->type);
+ if(lab->label!=NULL)
+ print_token(out,lab->label);
+ fprintf(out,":\n");
+ print_ast(out,lab->statement);
+ }
+ void print_compound_statement_tree(FILE *out,struct AST_Compound_Statement *comp)
+ {
+ struct Queue_Node *it;
+ fprintf(out,"{\n");
+ for(it=comp->components.first;it!=NULL;it=it->prev)
+ {
+ print_ast(out,(struct AST*)(it->data));
+ fprintf(out,";\n");
+ }
+ fprintf(out,"}\n");
+ }
+ void print_if_statement_tree(FILE *out,struct AST_If_Statement *ifs)
+ {
+ fprintf(out,"if(");
+ print_ast(out,ifs->condition);
+ fprintf(out,")\n");
+ print_ast(out,ifs->body_statement);
+
+ if(ifs->else_statement!=NULL)
+ {
+ fprintf(out,"\nelse");
+ print_ast(out,ifs->else_statement);
+ }
+
+ }
+ void print_switch_statement_tree(FILE *out,struct AST_Switch_Statement *swi)
+ {
+ fprintf(out,"switch(");
+ print_ast(out,swi->condition);
+ fprintf(out,")\n");
+ print_ast(out,swi->body_statement);
+ }
+ void print_while_statement_tree(FILE *out,struct AST_While_Statement *whi)
+ {
+ fprintf(out,"while(");
+ print_ast(out,whi->condition);
+ fprintf(out,")\n");
+ print_ast(out,whi->body_statement);
+ }
+ void print_do_while_statement_tree(FILE *out,struct AST_Do_While_Statement *whi)
+ {
+ fprintf(out,"do\n");
+ print_ast(out,whi->body_statement);
+ fprintf(out,"while(");
+ print_ast(out,whi->condition);
+ fprintf(out,")\n");
+ }
+ void print_for_statement_tree(FILE *out,struct AST_For_Statement *fo)
+ {
+ fprintf(out,"for(\n");
+ print_ast(out,fo->initialisation);
+ fprintf(out,";\n");
+ print_ast(out,fo->condition);
+ fprintf(out,";\n");
+ print_ast(out,fo->update);
+ fprintf(out,")\n");
+ print_ast(out,fo->body_statement);
+ }
+ void print_return_statement_tree(FILE *out,struct AST_Return_Statement *return_expression)
+ {
+ fprintf(out,"return ");
+ print_ast(out,return_expression->return_expression);
+ }
+ void print_goto_statement_tree(FILE *out,struct AST_Goto_Statement *got)
+ {
+ fprintf(out,"goto ");
+ print_token(out,got->label);
+ }
+
+ void print_type(FILE *out,struct Type *type,char should_print_struct_union)
+ {
+ switch(type->specifier)
+ {
+ case TS_VOID:
+ fprintf(out,"void");return;
+ case TS_CHAR:
+ fprintf(out,"char");return;
+ case TS_INT:
+ fprintf(out,"int");return;
+ case TS_FLOAT:
+ fprintf(out,"float");return;
+ case TS_DOUBLE:
+ fprintf(out,"double");return;
+ case TS_UNION:
+ case TS_STRUCT:
+ if(should_print_struct_union)
+ {
+ print_struct_union(out,((struct Type_Struct_Union*)type)->struct_union);
+ }else
+ {
+ fprintf(out,(type->specifier==TS_STRUCT?"struct":"union"));
+ }
+ return;
+ case TS_ENUM:
+ print_enumeration(out,((struct Type_Enum*)type)->enumeration);
+ return;
+ case TS_POINTER:
+ fprintf(out,"pointer to ");
+ print_type(out,((struct Type_Pointer*)type)->points_to,0);
+ return;
+ case TS_ARRAY:
+ fprintf(out,"array [%zu] of ",((struct Type_Array*)type)->number_of_elements);
+ print_type(out,((struct Type_Array*)type)->is_array_of,should_print_struct_union);
+ return;
+ case TS_FUNC:
+ fprintf(out,"function taking arguments (");
+ print_list_of_denoted(out,((struct Type_Function*)type)->parameters);
+ fprintf(out,") returning ");
+ print_type(out,((struct Type_Function*)type)->return_type,should_print_struct_union);
+ return;
+ case TS_BITFIELD:
+ fprintf(out,"%zu bits of ",((struct Type_Bit_Field*)type)->number_of_bits);
+ print_type(out,((struct Type_Bit_Field*)type)->base,should_print_struct_union);
+ return;
+ case TS_NONE:
+ fprintf(out,"NONE");return;
+ case TS_ERROR:
+ fprintf(out,"ERROR!");return;
+
+ }
+ assert(1==0);
+ }
+ void print_denoted(FILE *out,struct Denoted *denoted)
+ {
+
+ switch(denoted->denotation)
+ {
+ case DT_Macro:
+ fprintf(out,"macro ");return;
+ case DT_Macro_Parameter:
+ fprintf(out,"macro parameter ");return;
+ case DT_Label:
+ fprintf(out,"label ");return;
+ case DT_Object:
+ fprintf(out,"denoted object ");
+ print_token(out,((struct Denoted_Object*)denoted)->id);
+ fprintf(out," is a ");
+ print_type(out,((struct Denoted_Object*)denoted)->object->type,1);
+
+ return;
+ case DT_Typedef:
+ fprintf(out,"typedef ");
+ print_token(out,((struct Denoted_Typedef*)denoted)->id);
+ fprintf(out," to ");
+ print_type(out,((struct Denoted_Typedef*)denoted)->type,0);
+ return;
+ case DT_Function:
+ print_token(out,((struct Denoted_Function*)denoted)->id);
+ fprintf(out," is ");
+ print_type(out,((struct Denoted_Function*)denoted)->type,1);
+ return;
+ case DT_Enum:
+ print_token(out,((struct Denoted_Enum*)denoted)->id);
+ fprintf(out," is ");
+ print_enumeration(out,((struct Denoted_Enum*)denoted)->enumeration);
+ return;
+ case DT_Enum_Constant:
+ fprintf(out,"%i ",((struct Denoted_Enum_Const*)denoted)->value);
+ return;
+ case DT_Struct_Union_Tag:
+ print_token(out,((struct Denoted_Struct_Union*)denoted)->id);
+ fprintf(out," is ");
+ print_struct_union(out,((struct Denoted_Struct_Union*)denoted)->struct_union);
+ case DT_Error:
+ fprintf(out,"denotation error");return;
+ case DT_Prototype:
+ fprintf(out,"denotation prototyep");return;
+
+ }
+ }
+ void print_list_of_denoted(FILE *out,struct Queue *denoted)
+ {
+ struct Queue_Node *it;
+ for(it=denoted->first;it!=NULL;it=it->prev)
+ {
+ print_denoted(out,(struct Denoted*)it->data);
+ if(it->prev!=NULL)
+ fprintf(out,",");
+ }
+ }
+ void print_enumeration(FILE *out,struct Enum *enumeration)
+ {
+ fprintf(out,"enum ");
+ print_list_of_denoted(out,enumeration->consts);
+ }
+ void print_struct_union(FILE *out,struct Struct_Union *struct_union)
+ {
+ switch(struct_union->specifier)
+ {
+ case TS_UNION:
+ fprintf(out,"union ");
+ break;
+ case TS_STRUCT:
+ fprintf(out,"struct ");
+ break;
+ default:
+ assert(1==0);
+ }
+ fprintf(out,"{");
+ print_list_of_denoted(out,struct_union->members);
+ fprintf(out,"}");
+
+ }
+ void print_translation_unit_tree(FILE *out,struct AST_Translation_Unit *unit)
+ {
+ struct Queue_Node *it;
+ struct AST* hold;
+ for(it=unit->components.first;it!=NULL;it=it->prev)
+ {
+ hold=(struct AST*)(it->data);
+ print_ast(out,hold);
+ if(hold->type!=ST_FUNCTION_DEFINITION)
+ {
+ fprintf(out,";\n");
+ }
+ }
+ }
+ void print_ast(FILE *out,struct AST* tree)
+ {
+ if(tree==NULL)
+ {
+ fprintf(out,"NULL");
+ return ;
+ }
+ switch(tree->type)
+ {
+ case OP_MEMBER_TROUGH_PTR:
+ case OP_MEMBER:
+ case OP_BITWISE_AND:
+ case OP_BITWISE_XOR:
+ case OP_BITWISE_NOT:
+ case OP_LOGICAL_AND:
+ case OP_LOGICAL_OR:
+ case OP_XOR_ASSIGN:
+ case OP_PIPE_ASSIGN:
+ case OP_SHIFT_RIGHT_ASSIGN:
+ case OP_ADD_ASSIGN:
+ case OP_SUBTRACT_ASSIGN:
+ case OP_MULTIPLY_ASSIGN:
+ case OP_REMAINDER_ASSIGN:
+ case OP_DIV_ASSIGN:
+ case OP_SUBTRACTION:
+ case OP_MUL:
+ case OP_DIV:
+ case OP_REMAINDER:
+ case OP_EQUAL:
+ case OP_LESS:
+ case OP_LESS_EQ:
+ case OP_SHIFT_LEFT:
+ case OP_BITWISE_OR:
+ case OP_AND_ASSIGN:
+ case OP_ARR_SUBSCRIPT:
+ case OP_SHIFT_LEFT_ASSIGN:
+ case OP_ASSIGN:
+ case OP_ADDITION:
+ case OP_COMMA:
+ case OP_SHIFT_RIGHT:
+ case OP_GREATER_EQ:
+ case OP_GREATER:
+ case OP_NOT_EQUAL:
+ print_binary_expression_tree(out,(struct AST_Binary_Expression*)tree);
+ break;
+ case OP_COND:
+ print_conditional_expression_tree(out,(struct AST_Conditional_Expression*)tree);
+ break;
+ case OP_FUNCTION:
+ print_function_expression_tree(out,(struct AST_Function_Expression*)tree);
+ break;
+ case OP_LOGICAL_NOT:
+ case OP_UNARY_MINUS:
+ case OP_SIZEOF:
+ case OP_ADDR_OF:
+ case OP_DEREFERENCE:
+ case OP_POSTFIX_INC:
+ case OP_PREFIX_INC:
+ case OP_UNARY_PLUS:
+ case OP_POSTFIX_DEC:
+ case OP_PREFIX_DEC:
+ case OP_CAST:
+ print_unary_expression_tree(out,(struct AST_Unary_Expression*)tree);
+ break;
+ case OP_LVALUE:
+ print_lvalue_expression_tree(out,(struct AST_Lvalue_Expression*)tree);
+ break;
+ case OP_RVALUE:
+ print_rvalue_expression_tree(out,(struct AST_Rvalue_Expression*)tree);
+ break;
+ case OP_NOP:
+ fprintf(out,"NOP");
+ break;
+
+ case ST_SWITCH:
+ print_switch_statement_tree(out,(struct AST_Switch_Statement*)tree);
+ break;
+ case ST_IF:
+ print_if_statement_tree(out,(struct AST_If_Statement*)tree);
+ break;
+ case ST_WHILE:
+ print_while_statement_tree(out,(struct AST_While_Statement*)tree);
+ break;
+ case ST_DO_WHILE:
+ print_do_while_statement_tree(out,(struct AST_Do_While_Statement*)tree);
+ break;
+ case ST_GOTO:
+ print_goto_statement_tree(out,(struct AST_Goto_Statement*)tree);
+ break;
+ case ST_DEFAULT:
+ case ST_LABEL:
+ case ST_CASE:
+ print_labeled_statement_tree(out,(struct AST_Labeled_Statement*)tree);
+ break;
+ case ST_CONTINUE:
+ fprintf(out,"continue");
+ break;
+ case ST_BREAK:
+ fprintf(out,"break");
+ break;
+ case ST_RETURN:
+ print_return_statement_tree(out,(struct AST_Return_Statement*)tree);
+ break;
+ case ST_FOR:
+ print_for_statement_tree(out,(struct AST_For_Statement*)tree);
+ break;
+ case ST_COMPOUND:
+ print_compound_statement_tree(out,(struct AST_Compound_Statement*)tree);
+ break;
+ case ST_OBJECT_DECLARATION:
+ print_denoted(out,(struct Denoted*)((struct AST_Object_Declaration*)tree)->object);
+ fprintf(out,"=");
+ print_ast(out,((struct AST_Object_Declaration*)tree)->initializer);
+ break;
+ case ST_TYPE_DEFINITION:
+ print_denoted(out,(struct Denoted*)((struct AST_Type_Definition*)tree)->definition);
+ break;
+ case ST_FUNCTION_DECLARATION:
+ print_denoted(out,(struct Denoted*)((struct AST_Function_Declaration*)tree)->function);
+ break;
+ case ST_FUNCTION_DEFINITION:
+ print_function_definition(out,((struct AST_Function_Declaration*)tree)->function);
+ break;
+ case TRANSLATION_UNIT:
+ print_translation_unit_tree(out,(struct AST_Translation_Unit*)tree);
+ break;
+ case ERROR:
+ print_error_tree(out,(struct AST_Error*)tree);
+ break;
+ default:
+ fprintf(out,"NOT_POSSIBLE");break;
+ }
+
+ }
+
+ void print_function_definition(FILE *out,struct Denoted_Function *function)
+ {
+ print_token(out,function->id);
+ fprintf(out," is a ");
+ print_type(out,function->type,1);
+ print_ast(out,(struct AST*)function->body);
+ }
+ void print_program_tokens(FILE *out,struct Program *program)
+ {
+ struct Queue_Node *it;
+ struct Queue_Node *it2;
+ it=program->source_files.first;
+ it2=program->translation_units_tokens.first;
+ for(;it!=NULL && it2!=NULL;it=it->prev,it2=it2->prev)
+ {
+ fprintf(out,"TOKENS for %s\n{\n",((struct Source_File*)(it->data))->src_name);
+ print_tokens(out,it2->data);
+ fprintf(out,"TOKENS_END for %s\n}\n",((struct Source_File*)(it->data))->src_name);
+ }
+ }
+ void print_program_ast(FILE *out,struct Program *program)
+ {
+ size_t i;
+ struct Queue_Node *it;
+ it=program->source_files.first;
+ for( i=0; (i<program->number_of_translation_units) && it!=NULL;++i,it=it->prev)
+ {
+ fprintf(out,"TRANSLATION_UNIT for %s\n{\n",((struct Source_File*)(it->data))->src_name);
+ print_ast(out,program->translation_units[i]);
+ fprintf(out,"TRANSLATION_UNIT_END for %s\n}\n",((struct Source_File*)(it->data))->src_name);
+ }
+ }
+ void print_keyword_enum(FILE *out,enum KEYWORDS kw)
+ {
+ switch(kw)
+ {
+ case KW_AUTO :
+ fprintf(out," KW_AUTO ");break;
+ case KW_DO :
+ fprintf(out," KW_DO ");break;
+ case KW_DOUBLE :
+ fprintf(out," KW_DOUBLE ");break;
+ case KW_INT :
+ fprintf(out," KW_INT ");break;
+ case KW_STRUCT :
+ fprintf(out," KW_STRUCT ");break;
+ case KW_BREAK :
+ fprintf(out," KW_BREAK ");break;
+ case KW_ELSE :
+ fprintf(out," KW_ELSE ");break;
+ case KW_LONG :
+ fprintf(out," KW_LONG ");break;
+ case KW_SWITCH :
+ fprintf(out," KW_SWITCH ");break;
+ case KW_CASE :
+ fprintf(out," KW_CASE ");break;
+ case KW_ENUM :
+ fprintf(out," KW_ENUM ");break;
+ case KW_REGISTER :
+ fprintf(out," KW_REGISTER ");break;
+ case KW_TYPEDEF :
+ fprintf(out," KW_TYPEDEF ");break;
+ case KW_CHAR :
+ fprintf(out," KW_CHAR ");break;
+ case KW_EXTERN :
+ fprintf(out," KW_EXTERN ");break;
+ case KW_RETURN :
+ fprintf(out," KW_RETURN ");break;
+ case KW_UNION :
+ fprintf(out," KW_UNION ");break;
+ case KW_CONST :
+ fprintf(out," KW_CONST ");break;
+ case KW_FLOAT :
+ fprintf(out," KW_FLOAT ");break;
+ case KW_SHORT :
+ fprintf(out," KW_SHORT ");break;
+ case KW_UNSIGNED :
+ fprintf(out," KW_UNSIGNED ");break;
+ case KW_CONTINUE :
+ fprintf(out," KW_CONTINUE ");break;
+ case KW_FOR :
+ fprintf(out," KW_FOR ");break;
+ case KW_SIGNED :
+ fprintf(out," KW_SIGNED ");break;
+ case KW_VOID :
+ fprintf(out," KW_VOID ");break;
+ case KW_DEFAULT :
+ fprintf(out," KW_DEFAULT ");break;
+ case KW_GOTO :
+ fprintf(out," KW_GOTO ");break;
+ case KW_SIZEOF :
+ fprintf(out," KW_SIZEOF ");break;
+ case KW_VOLATILE :
+ fprintf(out," KW_VOLATILE ");break;
+ case KW_IF :
+ fprintf(out," KW_IF ");break;
+ case KW_STATIC :
+ fprintf(out," KW_STATIC ");break;
+ case KW_WHILE :
+ fprintf(out," KW_WHILE ");break;
+ case KW_EXCLAMATION :
+ fprintf(out," KW_EXCLAMATION ");break;
+ case KW_BACK_SLASH :
+ fprintf(out," KW_BACK_SLASH ");break;
+ case KW_PERCENT :
+ fprintf(out," KW_PERCENT ");break;
+ case KW_AND :
+ fprintf(out," KW_AND ");break;
+ case KW_AND_AND :
+ fprintf(out," KW_AND_AND ");break;
+ case KW_QUOTE :
+ fprintf(out," KW_QUOTE ");break;
+ case KW_OPEN_NORMAL :
+ fprintf(out," KW_OPEN_NORMAL ");break;
+ case KW_CLOSE_NORMAL :
+ fprintf(out," KW_CLOSE_NORMAL ");break;
+ case KW_STAR :
+ fprintf(out," KW_STAR ");break;
+ case KW_PLUS :
+ fprintf(out," KW_PLUS ");break;
+ case KW_COMMA :
+ fprintf(out," KW_COMMA ");break;
+ case KW_MINUS :
+ fprintf(out," KW_MINUS ");break;
+ case KW_DOT :
+ fprintf(out," KW_DOT ");break;
+ case KW_ARROW :
+ fprintf(out," KW_ARROW ");break;
+ case KW_COLUMN :
+ fprintf(out," KW_COLUMN ");break;
+ case KW_SEMI_COLUMN :
+ fprintf(out," KW_SEMI_COLUMN ");break;
+ case KW_LESS :
+ fprintf(out," KW_LESS ");break;
+ case KW_EQ :
+ fprintf(out," KW_EQ ");break;
+ case KW_EQEQ :
+ fprintf(out," KW_EQEQ ");break;
+ case KW_MORE :
+ fprintf(out," KW_MORE ");break;
+ case KW_QUESTION :
+ fprintf(out," KW_QUESTION ");break;
+ case KW_OPEN_SQUARE :
+ fprintf(out," KW_OPEN_SQUARE ");break;
+ case KW_CLOSE_SQUARE :
+ fprintf(out," KW_CLOSE_SQUARE ");break;
+ case KW_HAT :
+ fprintf(out," KW_HAT ");break;
+ case KW_FLOOR :
+ fprintf(out," KW_FLOOR ");break;
+ case KW_OPEN_CURLY :
+ fprintf(out," KW_OPEN_CURLY ");break;
+ case KW_CLOSE_CURLY :
+ fprintf(out," KW_CLOSE_CURLY ");break;
+ case KW_PIPE :
+ fprintf(out," KW_PIPE ");break;
+ case KW_PIPE_PIPE :
+ fprintf(out," KW_PIPE_PIPE ");break;
+ case KW_TILDE :
+ fprintf(out," KW_TILDE ");break;
+ case KW_PLUSPLUS :
+ fprintf(out," KW_PLUSPLUS ");break;
+ case KW_MINUSMINUS :
+ fprintf(out," KW_MINUSMINUS ");break;
+ case KW_SHIFT_RIGHT :
+ fprintf(out," KW_SHIFT_RIGHT ");break;
+ case KW_SHIFT_LEFT :
+ fprintf(out," KW_SHIFT_LEFT ");break;
+ case KW_LESS_EQ :
+ fprintf(out," KW_LESS_EQ ");break;
+ case KW_MORE_EQ :
+ fprintf(out," KW_MORE_EQ ");break;
+ case KW_NOT_EQ :
+ fprintf(out," KW_NOT_EQ ");break;
+ case KW_PLUS_EQ :
+ fprintf(out," KW_PLUS_EQ ");break;
+ case KW_MINUS_EQ :
+ fprintf(out," KW_MINUS_EQ ");break;
+ case KW_STAR_EQ :
+ fprintf(out," KW_STAR_EQ ");break;
+ case KW_PERCENT_EQ :
+ fprintf(out," KW_PERCENT_EQ ");break;
+ case KW_SHIFT_LEFT_EQ :
+ fprintf(out," KW_SHIFT_LEFT_EQ ");break;
+ case KW_SHIFT_RIGHT_EQ :
+ fprintf(out," KW_SHIFT_RIGHT_EQ ");break;
+ case KW_AND_EQ :
+ fprintf(out," KW_AND_EQ ");break;
+ case KW_HAT_EQ :
+ fprintf(out," KW_HAT_EQ ");break;
+ case KW_PIPE_EQ :
+ fprintf(out," KW_PIPE_EQ ");break;
+ case KW_DIV_EQ :
+ fprintf(out," KW_DIV_EQ ");break;
+ case KW_FORWARD_SLASH :
+ fprintf(out," KW_FORWARD_SLASH ");break;
+ case KW_NOTYPE :
+ fprintf(out," KW_NOTYPE ");break;
+ case KW_NUMBER :
+ fprintf(out," KW_NUMBER ");break;
+ case KW_COMMENT :
+ fprintf(out," KW_COMMENT ");break;
+ case KW_ID :
+ fprintf(out," KW_ID ");break;
+ case KW_STRING :
+ fprintf(out," KW_STRING ");break;
+ }
+ }
+ #undef TOK
+ #undef INDENT
+
+ #endif
F diff --git a/misc/print.h b/misc/print.h
new file mode 100644
--- /dev/null
+++ b/misc/print.h
+ #ifndef GCC_PRINT_H
+ #define GCC_PRINT_H GCC_PRINT_H
+
+ #include<stdio.h>
+ #include<assert.h>
+ #include <all.h>
+
+
+ #define INDENT for(int j=0;j<indent;++j) fprintf(out," ");
+ #define TOK(s) ((struct token*)(s))
+ #define ASTPTR(s) ((struct AST*)(s))
+
+ int indent;
+
+ void print_token(FILE *out,struct token *token);
+ void print_tokens(FILE *out,struct Queue *tokens);
+ void print_ast_enum(FILE *out,enum AST_Type op);
+ void print_error_tree(FILE *out,struct AST_Error *error);
+ void print_binary_expression_tree(FILE *out,struct AST_Binary_Expression *bin);
+ void print_conditional_expression_tree(FILE *out,struct AST_Conditional_Expression *cond);
+ void print_function_expression_tree(FILE *out,struct AST_Function_Expression *function_call);
+ void print_unary_expression_tree(FILE *out,struct AST_Unary_Expression *unary_expression);
+ void print_rvalue_expression_tree(FILE *out,struct AST_Rvalue_Expression *rval);
+ void print_lvalue_expression_tree(FILE *out,struct AST_Lvalue_Expression *lval);
+ void print_labeled_statement_tree(FILE *out,struct AST_Labeled_Statement *lab);
+ void print_compound_statement_tree(FILE *out,struct AST_Compound_Statement *comp);
+ void print_if_statement_tree(FILE *out,struct AST_If_Statement *ifs);
+ void print_switch_statement_tree(FILE *out,struct AST_Switch_Statement *swi);
+ void print_while_statement_tree(FILE *out,struct AST_While_Statement *whi);
+ void print_do_while_statement_tree(FILE *out,struct AST_Do_While_Statement *whi);
+ void print_for_statement_tree(FILE *out,struct AST_For_Statement *fo);
+ void print_return_statement_tree(FILE *out,struct AST_Return_Statement *return_expression);
+ void print_goto_statement_tree(FILE *out,struct AST_Goto_Statement *got);
+ void print_type(FILE *out,struct Type *type,char print_struct_union);
+ void print_denoted(FILE *out,struct Denoted *denoted);
+ void print_list_of_denoted(FILE *out,struct Queue *denoted);
+ void print_enumeration(FILE *out,struct Enum *enumeration);
+ void print_struct_union(FILE *out,struct Struct_Union *struct_union);
+ void print_translation_unit_tree(FILE *out,struct AST_Translation_Unit *unit);
+ void print_ast(FILE *out,struct AST* tree);
+ void print_program_tokens(FILE *out,struct Program *program);
+ void print_program_ast(FILE *out,struct Program *program);
+ void print_keyword_enum(FILE *out,enum KEYWORDS kw);
+ void print_function_definition(FILE *out,struct Denoted_Function *function);
+
+
+ #endif
F diff --git a/misc/queue.c b/misc/queue.c
new file mode 100644
--- /dev/null
+++ b/misc/queue.c
+ #ifndef GQUEUE_C
+ #define GQUEUE_C GQUEUE_C
+ #include "queue.h"
+
+ void Queue_Init(Queue *q)
+ {
+ q->first=q->last=NULL;
+ q->size=0;
+ }
+ void Queue_Push(Queue *q,void *data)
+ {
+ if(q==NULL)return;
+ if(q->first==NULL)
+ {
+ q->first=q->last=malloc(sizeof(struct Queue_Node));
+
+ q->first->data=data;
+ q->last->prev=NULL;
+
+ ++q->size;
+ return;
+ }else
+ {
+ struct Queue_Node *temp=malloc(sizeof(struct Queue_Node));
+ q->last->prev=temp;
+ temp->data=data;
+ temp->prev=NULL;
+
+ q->last=temp;
+ ++q->size;
+ }
+
+ }
+ /*max queueiness*/
+ void Queue_Push_Front(struct Queue *q,void *data)
+ {
+ if(q==NULL)return;
+ if(q->first==NULL)
+ {
+ q->first=q->last=malloc(sizeof(struct Queue_Node));
+
+ q->first->data=data;
+ q->last->prev=NULL;
+
+ ++q->size;
+ }else
+ {
+ struct Queue_Node *temp=malloc(sizeof(struct Queue_Node));
+ temp->prev=q->first;
+ temp->data=data;
+
+ q->first=temp;
+ ++q->size;
+ }
+
+ }
+ void* Queue_Pop(Queue *q)
+ {
+ if(q==NULL)return NULL;
+ if(q->size==0)return NULL;
+
+ void *return_value=q->first->data;
+
+ if(q->size==1)
+ {
+ free(q->last);
+ q->first=q->last=NULL;
+ q->size=0;
+ }else
+ {
+ struct Queue_Node *temp_first=q->first;
+ q->first=q->first->prev;
+ free(temp_first);
+ --q->size;
+ }
+ return return_value;
+ }
+ void Queue_Append(struct Queue *lead,struct Queue *follower)
+ {
+ assert(lead!=NULL);
+ lead->last->prev=follower->first;
+ lead->last=follower->last;
+
+ lead->size+=follower->size;
+ }
+
+ void Queue_Destroy(Queue *q)
+ {
+
+ struct Queue_Node *temp_first;
+ while(q->first!=NULL)
+ {
+ temp_first=q->first;
+ q->first=q->first->prev;
+ free(temp_first->data);
+ free(temp_first);
+ }
+
+ }
+ /*
+ Fits a new Queue on top of q. It uses its elements as its own
+ Do not destroy
+ last element ->prev is may not be null
+ */
+ struct Queue Queue_Fit(struct Queue *q,size_t offset)
+ {
+ assert(q->size>offset && offset>0);
+
+ struct Queue ret;
+ size_t i;
+
+ ret.size=q->size-offset;
+ ret.first=q->first;
+ ret.last=q->last;
+
+ for(i=0;i<offset;++i)
+ {
+ ret.first=ret.first->prev;
+ }
+ return ret;
+
+ }
+ #endif //#ifndef GQUEUE_C
F diff --git a/misc/queue.h b/misc/queue.h
new file mode 100644
--- /dev/null
+++ b/misc/queue.h
+ #ifndef GQUEUE_H
+ #define GQUEUE_H GQUEUE_H
+ #include<stdlib.h>//malloc free
+ #include<assert.h>
+
+ typedef struct Queue Queue;
+
+ struct Queue
+ {
+ struct Queue_Node
+ {
+ void *data;
+ struct Queue_Node *prev;
+ }*first,*last;
+
+ size_t size;
+
+ };
+ void Queue_Init(Queue *q);
+ void Queue_Push(Queue *q,void *data);
+ void Queue_Push_Front(struct Queue *q,void *data);
+ void* Queue_Pop(Queue *q);
+ void Queue_Append(struct Queue *lead,struct Queue *follower);
+ void Queue_Destroy(Queue *q);
+
+ #endif
F diff --git a/misc/stack.c b/misc/stack.c
new file mode 100644
--- /dev/null
+++ b/misc/stack.c
+ #ifndef GSTACK_C
+ #define GSTACK_C GSTACK_C
+ #include "stack.h"
+
+
+
+ void Stack_Init(Stack *stack)
+ {
+ stack->size=0;
+ stack->first=NULL;
+ }
+ void Stack_Push(Stack *stack,void* data)
+ {
+ struct Stack_Node *temp_node=malloc(sizeof(struct Stack_Node));
+ temp_node->data=data;
+ temp_node->next=stack->first;
+ stack->first=temp_node;
+ ++stack->size;
+ }
+ void* Stack_Pop(Stack *stack)
+ {
+ void* return_value=NULL;
+ if(stack->first!=NULL)
+ {
+ struct Stack_Node *temp_first=stack->first;
+ return_value=stack->first->data;
+
+ --stack->size;
+ stack->first=stack->first->next;
+ free(temp_first);
+ }
+
+ return return_value;
+ }
+
+ #endif//#ifndef GSTACK_C
+
F diff --git a/misc/stack.h b/misc/stack.h
new file mode 100644
--- /dev/null
+++ b/misc/stack.h
+ #ifndef GSTACK_H
+ #define GSTACK_H GSTACK_H
+ #include<stdlib.h>//malloc free et alii
+ typedef struct Stack Stack;
+
+ struct Stack
+ {
+ struct Stack_Node
+ {
+ struct Stack_Node *next;
+ void *data;
+ }*first;
+ size_t size;
+ };
+
+ void Stack_Init(Stack *stack);
+ void Stack_Push(Stack *stack,void* data);
+ void* Stack_Pop(Stack *stack);
+
+
+ #endif
F diff --git a/parse.h b/parse.h
deleted file mode 100644
--- a/parse.h
+++ /dev/null
- #ifndef GCC_PARSE_C
- #define GCC_PARSE_C GCC_PARSE_C
-
- #include "parse_expression.h"
- #include "parse_statement.h"
- #include "parse_declaration.h"
- #include "parse_translation_unit.h"
-
-
- #include "parse_expression.c"
- #include "parse_statement.c"
- #include "parse_declaration.c"
- #include "parse_translation_unit.c"
-
-
-
-
- #endif
F diff --git a/parse/parse.h b/parse/parse.h
new file mode 100644
--- /dev/null
+++ b/parse/parse.h
+ #ifndef GCC_PARSE_C
+ #define GCC_PARSE_C GCC_PARSE_C
+
+ #include <parse_expression.h>
+ #include <parse_statement.h>
+ #include <parse_declaration.h>
+ #include <parse_translation_unit.h>
+
+
+ #include <parse_expression.c>
+ #include <parse_statement.c>
+ #include <parse_declaration.c>
+ #include <parse_translation_unit.c>
+
+
+
+
+ #endif
F diff --git a/parse/parse_declaration.c b/parse/parse_declaration.c
new file mode 100644
--- /dev/null
+++ b/parse/parse_declaration.c
+ #ifndef GCC_PARSE_DECLARATION_C
+ #define GCC_PARSE_DECLARATION_C GCC_PARSE_DECLARATION_C
+ #include"parse_declaration.h"
+
+ /*declaration-specifiers init-declarator (,init-declarator)* ;*/
+ /* init-declarator: declarator [ = initializer ] */
+ void parse_declaration(struct Queue *tokens,struct Scope *scope,struct Queue *where_to_push,char parse_function_definitions)
+ {
+ struct Denotation_Prototype *prototype;
+ struct Denoted *hold;
+
+ prototype=parse_declaration_specifiers(tokens,scope);
+ while(1)
+ {
+ if(get_and_check(tokens,KW_SEMI_COLUMN))
+ return;
+ hold=parse_declarator(tokens,scope,prototype);
+ if(hold->denotation==DT_Function && parse_function_definitions==1)
+ {
+ if(get_and_check(tokens,KW_OPEN_CURLY))
+ {
+ ((struct Denoted_Function*)hold)->body=(struct AST_Compound_Statement*)parse_finish_compound_statement(tokens,scope);
+ Queue_Push(where_to_push,get_function_definition_tree(scope,(struct Denoted_Function*)hold));
+ Scope_Push(scope,hold);
+ free(prototype);
+ return;
+ }
+
+ Queue_Push(where_to_push,get_function_declaration_tree(scope,(struct Denoted_Function*)hold));
+ }else if(hold->denotation==DT_Typedef)
+ {
+ Queue_Push(where_to_push,get_type_definition_tree((struct Denoted_Typedef*)hold,scope));
+ }else if(hold->denotation==DT_Object)
+ {
+ Queue_Push(where_to_push,get_object_declaration_tree((struct Denoted_Object*)hold,NULL,scope));
+ }else
+ {
+ /*TODO error*/
+ Queue_Push(where_to_push,get_declaration_error_tree(hold));
+ free(prototype);
+ return;
+ }
+
+ Scope_Push(scope,hold);
+ parse_function_definitions=0;
+ if(!get_and_check(tokens,KW_COMMA))
+ {
+ if(get_and_check(tokens,KW_SEMI_COLUMN))
+ {
+ return;
+ }else
+ {
+ /*TODO error*/
+ Queue_Push(where_to_push,get_declaration_error_tree(NULL));
+ return;
+ }
+ }
+ }
+ free(prototype);
+
+ }
+
+
+ struct Denotation_Prototype* parse_specifier_qualifier_list(struct Queue *tokens,struct Scope *scope)
+ {
+ return parse_declaration_specifiers_inner(tokens,scope,0);
+ }
+ struct Denotation_Prototype* parse_declaration_specifiers(struct Queue *tokens,struct Scope *scope)
+ {
+ return parse_declaration_specifiers_inner(tokens,scope,1);
+ }
+
+ /*declaration-specifiers:
+ ( storage-class-specifier type-specifier type-qualifier function-specifier)* */
+ struct Denotation_Prototype* parse_declaration_specifiers_inner(struct Queue *tokens,struct Scope *scope,char parse_storage_class)
+ {
+ enum KEYWORDS hold_kw;
+ struct Denotation_Prototype *ret;
+ ret=(struct Denotation_Prototype*)get_denotation_prototype();
+
+ while(1)
+ {
+ hold_kw=kw_get(tokens);
+ switch(hold_kw)
+ {
+ case KW_CONST:
+ chomp(tokens);
+ ret->is_const=1;
+ break;
+ case KW_VOLATILE:
+ chomp(tokens);
+ ret->is_volatile=1;
+ break;
+ case KW_INT:
+ chomp(tokens);
+ if(ret->specifier!=TS_NONE)
+ {
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->specifier=TS_INT;
+ break;
+ case KW_VOID:
+ chomp(tokens);
+ if(ret->specifier!=TS_NONE)
+ {
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->specifier=TS_VOID;
+ break;
+ case KW_CHAR:
+ chomp(tokens);
+ if(ret->specifier!=TS_NONE)
+ {
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->specifier=TS_CHAR;
+ break;
+ case KW_DOUBLE:
+ chomp(tokens);
+ if(ret->specifier!=TS_NONE)
+ {
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->specifier=TS_DOUBLE;
+ break;
+ case KW_FLOAT:
+ chomp(tokens);
+ if(ret->specifier!=TS_NONE)
+ {
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->specifier=TS_FLOAT;
+ break;
+ case KW_LONG:
+ chomp(tokens);
+ if(ret->constraint!=TC_NONE)
+ {
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->constraint=TC_LONG;
+ break;
+ case KW_SHORT:
+ chomp(tokens);
+ if(ret->constraint!=TC_NONE)
+ {
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->constraint=TC_SHORT;
+ break;
+ case KW_EXTERN:
+ if(!parse_storage_class)
+ goto exit;
+ chomp(tokens);
+ if(ret->storage_class!=SC_NONE)
+ {
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->storage_class=SC_EXTERN;
+ break;
+ case KW_STATIC:
+ if(!parse_storage_class)
+ goto exit;
+ chomp(tokens);
+ if(ret->storage_class!=SC_NONE)
+ {
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->storage_class=SC_STATIC;
+ break;
+ case KW_TYPEDEF:
+ if(!parse_storage_class)
+ goto exit;
+ chomp(tokens);
+ if(ret->storage_class!=SC_NONE)
+ {
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ ret->storage_class=SC_TYPEDEF;
+ break;
+ case KW_STRUCT:
+ ret->specifier=TS_STRUCT;
+ goto hack;
+ case KW_UNION:
+ ret->specifier=TS_UNION;
+ hack:
+ chomp(tokens);
+ if(check(tokens,KW_ID,0))
+ {
+ struct token *id;
+ struct Denoted_Struct_Union *tag;
+ id=Queue_Pop(tokens);
+ tag=(struct Denoted_Struct_Union*)check_tag(scope,id);
+
+ if(tag==NULL)
+ {
+ struct Struct_Union *body;
+ body=get_struct_union_base(scope,ret->specifier);
+ Scope_Push(scope,get_denoted_struct_union(id,body));
+
+ parse_struct_union_specifier_finish(tokens,scope,body);
+ ret->struct_union=body;
+ }else
+ {
+ ret->struct_union=tag->struct_union;
+ if(ret->struct_union->specifier!=ret->specifier)
+ {
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ if(ret->struct_union->is_finished==0)
+ {
+ /*then this could be a definition*/
+ parse_struct_union_specifier_finish(tokens,scope,ret->struct_union);
+ }
+ }
+
+ }else
+ {
+ ret->struct_union=get_struct_union_base(scope,ret->specifier);
+ parse_struct_union_specifier_finish(tokens,scope,ret->struct_union);
+ }
+ break;
+ case KW_ENUM:
+ chomp(tokens);
+ ret->specifier=TS_ENUM;
+ if(check(tokens,KW_ID,0))
+ {
+ struct token *id;
+ struct Denoted_Enum *enumerator;
+ id=Queue_Pop(tokens);
+ enumerator=(struct Denoted_Enum*)check_tag(scope,id);
+ if(enumerator==NULL)
+ {
+ struct Enum *body;
+ body=get_enum_base();
+ Scope_Push(scope,get_denoted_enum(id,body));
+ parse_enum_specifier_finish(tokens,scope,body);
+ ret->enumerator=body;
+ }else
+ {
+ ret->enumerator=enumerator->enumeration;
+ if(enumerator->denotation!=DT_Enum)
+ {
+ return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
+ }
+ if(ret->enumerator->is_finished==0)
+ {
+ /*this could be an enum definition*/
+ parse_enum_specifier_finish(tokens,scope,ret->enumerator);
+ }
+ }
+
+ }else
+ {
+ parse_enum_specifier_finish(tokens,scope,ret->enumerator);
+ }
+ break;
+ case KW_ID:
+ if(ret->specifier==TS_NONE)
+ {
+ struct Denoted *hold;
+ hold=check_ordinary(scope,(struct token*)tokens->first->data);
+ if(hold!=NULL && hold->denotation==DT_Typedef)
+ {
+ ret->type=((struct Denoted_Typedef*)hold)->type;
+ chomp(tokens);
+ break;
+ }
+ /*falltrough - this has not been typedefed*/
+ }
+ /*falltrough (it is possible to overwrite typedef id from upper scope)*/
+ default:
+ exit:
+ if(ret->specifier==TS_ENUM)
+ {
+ ret->type=get_enum_type(ret);
+ }else if(ret->specifier==TS_STRUCT || ret->specifier==TS_UNION)
+ {
+ ret->type=get_struct_union_type(ret);
+ }else if(ret->type==NULL)
+ {
+ ret->type=get_basic_type(ret);
+ }
+ return ret;
+ }
+ }
+ }
+
+
+
+
+
+ /*
+ declarator:
+ ( pointer ( type-qualifier )* )* direct-declarator
+ */
+ struct Denoted* parse_declarator(struct Queue *tokens,struct Scope *scope,struct Denotation_Prototype *prototype)
+ {
+ struct Denoted_Base temp;
+ temp.id=NULL;
+ temp.denotation=DT_Prototype;
+ temp.type=prototype->type;
+ parse_declarator_inner(tokens,scope,&temp);
+ return extract_denoted(&temp,prototype,0);
+
+ }
+
+ void parse_declarator_inner(struct Queue *tokens,struct Scope *scope,struct Denoted_Base *base)
+ {
+ enum KEYWORDS hold;
+ while(get_and_check(tokens,KW_STAR))
+ {
+ base->type=get_pointer_type(base->type);
+ hold=kw_get(tokens);
+ while(1)
+ {
+ if(hold==KW_CONST)
+ {
+ ((struct Type_Pointer*)(base->type))->is_const=1;
+ }else if(hold==KW_VOLATILE)
+ {
+ ((struct Type_Pointer*)(base->type))->is_volatile=1;
+ }else
+ {
+ break;
+ }
+ }
+ }
+ parse_direct_declarator(tokens,scope,base);
+
+ }
+ /*
+ direct-declarator:
+ id direct-declarator-finish
+ ( declarator ) direct-declarator-finish
+ */
+ void parse_direct_declarator(struct Queue *tokens,struct Scope *scope,struct Denoted_Base *base)
+ {
+ if(check(tokens,KW_ID,0))
+ {
+ base->id=Queue_Pop(tokens);
+ parse_direct_declarator_finish(tokens,scope,base);
+
+ }else if(get_and_check(tokens,KW_OPEN_NORMAL))
+ {
+ struct Queue *hack;
+ hack=malloc(sizeof(struct Queue));
+ Queue_Init(hack);
+ while(!check(tokens,KW_CLOSE_NORMAL,0))
+ {
+ Queue_Push(hack,Queue_Pop(tokens));
+ }
+ /*remove closing )*/
+ chomp(tokens);
+ parse_direct_declarator_finish(tokens,scope,base);
+ parse_declarator_inner(hack,scope,base);
+ if(hack->size!=0)
+ {
+ /*TODO error*/
+ base->denotation=DT_Error;
+ while(hack->size)
+ {
+ free(Queue_Pop(hack));
+ }
+ free(hack);
+ return;
+ }
+ free(hack);
+
+ }else
+ {
+ /*this might be an abstract declarator*/
+ parse_direct_declarator_finish(tokens,scope,base);
+ }
+ }
+
+ /*
+ direct-declarator-finish:
+ ( [ constant-expression ] | (parameter-list) | ( [id-list] ) )*
+ */
+ void parse_direct_declarator_finish(struct Queue *tokens,struct Scope *scope,struct Denoted_Base *base)
+ {
+ while(1)
+ {
+ if(get_and_check(tokens,KW_OPEN_SQUARE))
+ {
+ base->type=get_array_type(base->type,parse_expression(tokens,scope));
+ if(!get_and_check(tokens,KW_CLOSE_NORMAL))
+ {
+ base->type=get_type_error(base->type);
+ base->denotation=DT_Error;
+ return;
+ }
+ }else if(get_and_check(tokens,KW_OPEN_NORMAL))
+ {
+ struct Queue *parameters;
+ struct Scope *function_prototype_scope;
+
+ function_prototype_scope=get_scope(scope);
+
+ parameters=malloc(sizeof(struct Queue));
+ Queue_Init(parameters);
+
+ parse_paramenter_list(tokens,function_prototype_scope,parameters);
+ base->type=get_function_type(base->type,parameters,function_prototype_scope);
+
+ }else
+ {
+ break;
+ }
+
+ }
+
+ }
+
+
+ /*
+ struct-union-specifier-finish:
+ { ( struct-declaration )* }
+ */
+ void parse_struct_union_specifier_finish(struct Queue *tokens,struct Scope *scope,struct Struct_Union *base)
+ {
+ if(get_and_check(tokens,KW_OPEN_CURLY))
+ {
+ base->is_finished=1;
+ while(parse_struct_declaration(tokens,base->inner_namespace,base->members))
+ {
+
+ if(get_and_check(tokens,KW_CLOSE_CURLY))
+ {
+ return ;
+ }
+ }
+
+ /*TODO error*/
+ return ;
+
+
+ }else
+ {
+ /*if this isnt a struct definition return an incomplete struct-union*/
+ return ;
+
+ }
+
+ }
+ /*
+ struct-declaration:
+ specifier-qualifier-list ( struct-declarator )* ;
+ */
+ char parse_struct_declaration(struct Queue *tokens,struct Scope *struct_scope,struct Queue* members)
+ {
+ struct Denotation_Prototype *prototype;
+ struct Denoted *hold;
+ prototype=parse_specifier_qualifier_list(tokens,struct_scope);
+ while(1)
+ {
+ hold=parse_struct_declarator(tokens,struct_scope,prototype);
+ if(hold!=NULL && hold->denotation!=DT_Error)
+ {
+ Scope_Push(struct_scope,hold);
+ Queue_Push(members,hold);
+
+ }else
+ {
+ free(prototype);
+ /*todo error*/
+ return 0;
+ }
+ if(!get_and_check(tokens,KW_COMMA))
+ {
+ if(get_and_check(tokens,KW_SEMI_COLUMN))
+ {
+ break;
+ }else
+ {
+ free(prototype);
+ /*todo error*/
+ return 0;
+ }
+ }
+ }
+ free(prototype);
+ return 1;
+
+ }
+ /*
+ struct-declarator:
+ declarator
+ [ declarator ] : constant-expression
+ */
+ struct Denoted* parse_struct_declarator(struct Queue *tokens,struct Scope *scope,struct Denotation_Prototype *prototype)
+ {
+ struct Denoted *hold;
+ if(get_and_check(tokens,KW_COLUMN))
+ {
+ /*unnamed bitfields are possible*/
+ struct Denoted_Object *obj;
+ obj=(struct Denoted_Object*)get_denoted_object(NULL,SC_NONE,prototype->type);
+ obj->object->type=get_type_bitfield(prototype->type,parse_expression(tokens,scope));
+ return (struct Denoted*)obj;
+
+ }else
+ {
+ hold=parse_declarator(tokens,scope,prototype);
+ if(get_and_check(tokens,KW_COLUMN))
+ {
+ if(hold->denotation==DT_Object)
+ {
+ ((struct Denoted_Object*)hold)->object->type=get_type_bitfield(((struct Denoted_Object*)hold)->object->type,parse_expression(tokens,scope));
+ return hold;
+ }else
+ {
+ /*TODO error*/
+ return get_denoted_error(hold);
+ }
+ }else
+ {
+ return hold;
+ }
+ }
+
+ }
+ /*
+ enum-specifier-finish
+ { ( enumeration-constant [ = constant-expression ] , )* }
+ */
+ void parse_enum_specifier_finish(struct Queue *tokens,struct Scope *scope,struct Enum *enumeration)
+ {
+ struct token *id;
+ struct Denoted_Enum_Const *hold;
+ int where_in_enumeration=0;
+ if(get_and_check(tokens,KW_OPEN_CURLY))
+ {
+ enumeration->is_finished=1;
+ do
+ {
+ if(check(tokens,KW_ID,0))
+ {
+ id=Queue_Pop(tokens);
+ if(get_and_check(tokens,KW_EQ))
+ {
+ hold=(struct Denoted_Enum_Const*)get_denoted_enum_const_expr(id,enumeration,parse_expression(tokens,scope));
+ Queue_Push(enumeration->consts,hold);
+ where_in_enumeration=hold->value+1;
+ }else
+ {
+ Queue_Push(enumeration->consts,get_denoted_enum_const_num(id,enumeration,where_in_enumeration));
+ ++where_in_enumeration;
+ }
+ if(!get_and_check(tokens,KW_COMMA) && get_and_check(tokens,KW_CLOSE_CURLY))
+ {
+ return;
+ }else
+ {
+ /*TODO error*/
+ Queue_Push(enumeration->consts,get_denoted_error(NULL));
+ return ;
+ }
+ }else
+ {
+ /*TODO error*/
+ Queue_Push(enumeration->consts,get_denoted_error(NULL));
+ return ;
+ }
+ }while(!get_and_check(tokens,KW_CLOSE_CURLY));
+
+ }
+ }
+
+ /*
+ parameter-list:
+ (declaratoion-specifiers (declarator | abstract-declarator),)+
+ */
+ void parse_paramenter_list(struct Queue *tokens,struct Scope *function_prototype_scope,struct Queue *parameters)
+ {
+ if(get_and_check(tokens,KW_CLOSE_NORMAL))
+ return;
+
+ struct Denotation_Prototype *prototype;
+ struct Denoted_Base temp;
+ struct Denoted *hold;
+ temp.denotation=DT_Prototype;
+ do
+ {
+ prototype=parse_declaration_specifiers(tokens,function_prototype_scope);
+
+ temp.id=NULL;
+ temp.type=prototype->type;
+
+ parse_declarator_inner(tokens,function_prototype_scope,&temp);
+
+ hold=extract_denoted(&temp,prototype,1);
+
+ Scope_Push(function_prototype_scope,hold);
+ Queue_Push(parameters,hold);
+
+ free(prototype);
+ }while(get_and_check(tokens,KW_COMMA));
+ if(!get_and_check(tokens,KW_CLOSE_NORMAL))
+ {
+ /*TODO error*/
+ Queue_Push(parameters,get_denoted_error(NULL));
+ return;
+ }
+
+ }
+ /*
+ type-name:
+ specifier-qualifier-list [abstract-declarator]
+ */
+ struct Type* parse_type_name(struct Queue *tokens,struct Scope *scope)
+ {
+ struct Denotation_Prototype *prototype;
+ struct Type *ret;
+ prototype=parse_specifier_qualifier_list(tokens,scope);
+ ret=parse_abstract_declarator(tokens,scope,prototype->type);
+ free(prototype);
+ return ret;
+ }
+ /*
+ abstract-declarator:
+ ( pointer )* abstract-direct-declarator
+ */
+ struct Type* parse_abstract_declarator(struct Queue *tokens,struct Scope *scope,struct Type *base)
+ {
+ struct Denoted_Base hold;
+ hold.denotation=DT_Prototype;
+ hold.id=NULL;
+ hold.type=base;
+ parse_declarator_inner(tokens,scope,&hold);
+
+ if(hold.denotation==DT_Error || hold.id!=NULL)
+ {
+ /*TODO error*/
+ return get_type_error(hold.type);
+ }
+ return hold.type;
+ }
+
+ /*
+ initializer:
+ assignment-expression
+ { initializer , ... [,] }
+ */
+ struct AST* parse_initializer(struct Queue *tokens,struct Scope *scope,struct Denoted_Object *base)
+ {
+
+ }
+
+ const const const const const const const const const const const const const const const const const const const const const const const char const const const constant;
+ #endif
F diff --git a/parse/parse_declaration.h b/parse/parse_declaration.h
new file mode 100644
--- /dev/null
+++ b/parse/parse_declaration.h
+ #ifndef GCC_PARSE_DECLARATION_H
+ #define GCC_PARSE_DECLARATION_H GCC_PARSE_DECLARATION_H
+ #include <ast.h>
+ #include <parse_expression.h>
+ #include <parse_statement.h>
+ #include <type.h>
+ #include <denoted.h>
+ #include <scope.h>
+ #include <queue.h>
+ #include <map.h>
+ #include <lexer.h>
+ #include <assert.h>
+
+ struct Denoted_Base;
+ struct Denotation_Prototype;
+ struct Struct_Union;
+ struct Denoted_Object;
+ struct Enum;
+
+
+ void parse_declaration(struct Queue *tokens,struct Scope *scope,struct Queue *where_to_push,char parse_function_definitions);
+ struct Denotation_Prototype* parse_specifier_qualifier_list(struct Queue *tokens,struct Scope *scope);
+ struct Denotation_Prototype* parse_declaration_specifiers(struct Queue *tokens,struct Scope *scope);
+ struct Denotation_Prototype* parse_declaration_specifiers_inner(struct Queue *tokens,struct Scope *scope,char parse_storage_class);
+ struct Denoted* parse_declarator(struct Queue *tokens,struct Scope *scope,struct Denotation_Prototype *prototype);
+ void parse_declarator_inner(struct Queue *tokens,struct Scope *scope,struct Denoted_Base *base);
+ void parse_direct_declarator(struct Queue *tokens,struct Scope *scope,struct Denoted_Base *base);
+ void parse_direct_declarator_finish(struct Queue *tokens,struct Scope *scope,struct Denoted_Base *base);
+ void parse_struct_union_specifier_finish(struct Queue *tokens,struct Scope *scope,struct Struct_Union *base);
+ char parse_struct_declaration(struct Queue *tokens,struct Scope *struct_scope,struct Queue* members);
+ struct Denoted* parse_struct_declarator(struct Queue *tokens,struct Scope *scope,struct Denotation_Prototype *prototype);
+ void parse_enum_specifier_finish(struct Queue *tokens,struct Scope *scope,struct Enum *enumeration);
+ void parse_paramenter_list(struct Queue *tokens,struct Scope *function_prototype_scope,struct Queue *parameters);
+ struct Type* parse_type_name(struct Queue *tokens,struct Scope *scope);
+ struct Type* parse_abstract_declarator(struct Queue *tokens,struct Scope *scope,struct Type *base);
+ struct AST* parse_initializer(struct Queue *tokens,struct Scope *scope,struct Denoted_Object *base);
+
+ #endif
F diff --git a/parse/parse_expression.c b/parse/parse_expression.c
new file mode 100644
--- /dev/null
+++ b/parse/parse_expression.c
+ #ifndef GCC_PARSE_EXPR_C
+ #define GCC_PARSE_EXPR_C GCC_PARSE_EXPR_C
+ #include "parse_expression.h"
+
+
+
+ struct AST* parse_expression(struct Queue *tokens,struct Scope *scope)
+ {
+ return parse_comma_expression(tokens,scope);
+ }
+
+ struct AST* parse_const_expression(struct Queue *tokens,struct Scope *scope)
+ {
+ return parse_comma_expression(tokens,scope);
+ }
+ /*
+ primary-expression:
+ number
+ string
+ id
+ (e)
+ generic-selection
+
+ */
+ struct AST* parse_primary_expression(struct Queue *tokens,struct Scope *scope)
+ {
+ struct token *hold_token;
+ struct AST *hold;
+
+ if(tokens->size==0)
+ {
+ /*TODO error*/
+ return (struct AST*)get_error_tree(NULL);
+ }
+ hold_token=Queue_Pop(tokens);
+ switch(hold_token->type)
+ {
+ case KW_NUMBER:
+ case KW_STRING:
+ return (struct AST*)get_rvalue_expression_tree(hold_token);
+ case KW_ID:
+ return (struct AST*)get_lvalue_expression_tree(hold_token,scope);
+ case KW_OPEN_NORMAL:
+ hold=parse_expression(tokens,scope);
+ if(get_and_check(tokens,KW_CLOSE_NORMAL))
+ {
+ return (struct AST*)hold;
+ }else
+ {
+ /*TODO error*/
+ return (struct AST*)get_error_tree(hold);
+ }
+ default:
+ /*TODO error*/
+ return (struct AST*)get_error_tree(NULL);
+ }
+
+ /*just in case*/
+ return (struct AST*)get_error_tree(NULL);
+
+ }
+
+
+ /*
+ arglist:
+ (e)*\)
+
+ */
+ struct AST_Function_Expression* parse_arglist(struct Queue *tokens,struct Scope *scope,struct AST* id)
+ {
+ struct AST_Function_Expression *ret;
+ ret=get_function_expression_tree(id,scope);
+ ret->id=id;
+ if(get_and_check(tokens,KW_CLOSE_NORMAL))
+ {
+ return ret;
+ }
+ do
+ {
+ Queue_Push(&ret->arguments,parse_assignment_expression(tokens,scope));
+ } while(get_and_check(tokens,KW_COMMA));
+ if(get_and_check(tokens,KW_CLOSE_NORMAL))
+ {
+ return ret;
+ }else
+ {
+ return (struct AST_Function_Expression*)get_error_tree((struct AST*)ret);
+ }
+
+ }
+
+ /*
+ postfix_expression:
+ postfix_expression ++
+ postfix_expression --
+ postfix_expression [ expression ]
+ postfix_expression.id
+ postfix_expression->id
+ postfix_expression ( arglist )
+
+
+ primary_expression
+ postfix_expression:
+ primary_expression ( ++ | -- | \[ expression \] | .id | ->id | \( arglist \) )*
+
+ */
+ struct AST* parse_postfix_expression(struct Queue *tokens,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ struct AST *hold_expr;
+
+
+ hold=parse_primary_expression(tokens,scope);
+
+ while(tokens->size!=0)
+ {
+ switch(((struct token*)tokens->first->data)->type)
+ {
+ case KW_PLUSPLUS:
+ chomp(tokens);
+ hold=(struct AST*)get_unary_expression_tree(hold,OP_POSTFIX_INC);
+ break;
+ case KW_MINUSMINUS:
+ chomp(tokens);
+ hold=(struct AST*)get_unary_expression_tree(hold,OP_POSTFIX_DEC);
+ break;
+ case KW_DOT:
+ chomp(tokens);
+ if(check(tokens,KW_ID,0))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,(struct AST*)get_lvalue_expression_tree(Queue_Pop(tokens),scope),OP_MEMBER);
+ }
+ break;
+ case KW_ARROW:
+ chomp(tokens);
+ if(check(tokens,KW_ID,0))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,(struct AST*)get_lvalue_expression_tree(Queue_Pop(tokens),scope),OP_MEMBER_TROUGH_PTR);
+ }
+ break;
+ case KW_OPEN_SQUARE:
+
+ chomp(tokens);
+ if(get_and_check(tokens,KW_CLOSE_SQUARE))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,NULL,OP_ARR_SUBSCRIPT);
+ }else
+ {
+ hold_expr=parse_expression(tokens,scope);
+ hold=(struct AST*)get_binary_expression_tree(hold,hold_expr,OP_ARR_SUBSCRIPT);
+ if(!get_and_check(tokens,KW_CLOSE_SQUARE))
+ {
+ return (struct AST*)get_error_tree(hold);
+ }
+ }
+ break;
+ case KW_OPEN_NORMAL:
+ chomp(tokens);
+ return (struct AST*)parse_arglist(tokens,scope,hold);
+ break;
+
+ default:
+ return hold;
+ }
+ }
+
+ return hold;
+ }
+
+ /*
+ cast-expression:
+ unary-expression
+ (type)cast-expression
+ */
+ struct AST* parse_cast_expression(struct Queue *tokens,struct Scope *scope)
+ {
+ struct AST_Unary_Expression *ret;
+ if(get_and_check(tokens,KW_OPEN_NORMAL))
+ {
+ if(is_type(tokens,scope))
+ {
+ ret=get_unary_expression_tree(NULL,OP_CAST);
+ ret->value_type=parse_type_name(tokens,scope);
+ if(get_and_check(tokens,KW_CLOSE_NORMAL))
+ {
+ ret->operand=parse_cast_expression(tokens,scope);
+ return (struct AST*)ret;
+ }else
+ {
+ return (struct AST*)get_error_tree((struct AST*)ret);
+
+ }
+
+ }else
+ {
+ return (struct AST*)parse_unary_expression(tokens,scope);
+ }
+ }else
+ {
+
+ return parse_unary_expression(tokens,scope);
+ }
+ }
+ /*
+ unary-expression:
+ ++unary-expression
+ --unary-expression
+ +unary-expression
+ -unary-expression
+ !cast-expression
+ ~cast-expression
+ *cast-expression
+ &cast-expression
+ sizeof ( typename )
+ sizeof unary-expression
+ postfix-expression
+
+ */
+
+ struct AST* parse_unary_expression(struct Queue *tokens,struct Scope *scope)
+ {
+ struct AST_Unary_Expression *hold;
+
+ if(tokens->size==0)
+ {
+ /*TODO error*/
+ return (struct AST*)get_error_tree(NULL);
+ }
+
+ /*TODO make it iterative*/
+ switch(((struct token*)tokens->first->data)->type)
+ {
+ case KW_PLUSPLUS:
+ chomp(tokens);
+ return (struct AST*)get_unary_expression_tree(parse_unary_expression(tokens,scope),OP_PREFIX_INC);
+ case KW_MINUSMINUS:
+ chomp(tokens);
+ return (struct AST*)get_unary_expression_tree(parse_unary_expression(tokens,scope),OP_PREFIX_DEC);
+ case KW_PLUS:
+ chomp(tokens);
+ return (struct AST*)get_unary_expression_tree(parse_cast_expression(tokens,scope),OP_UNARY_PLUS);
+ case KW_MINUS:
+ chomp(tokens);
+ return (struct AST*)get_unary_expression_tree(parse_cast_expression(tokens,scope),OP_UNARY_MINUS);
+ case KW_EXCLAMATION:
+ chomp(tokens);
+ return (struct AST*)get_unary_expression_tree(parse_cast_expression(tokens,scope),OP_LOGICAL_NOT);
+ case KW_TILDE:
+ chomp(tokens);
+ return (struct AST*)get_unary_expression_tree(parse_cast_expression(tokens,scope),OP_BITWISE_NOT);
+ case KW_STAR:
+ chomp(tokens);
+ return (struct AST*)get_unary_expression_tree(parse_cast_expression(tokens,scope),OP_DEREFERENCE);
+ case KW_AND:
+ chomp(tokens);
+ return (struct AST*)get_unary_expression_tree(parse_cast_expression(tokens,scope),OP_ADDR_OF);
+ case KW_SIZEOF:
+ chomp(tokens);
+ if(get_and_check(tokens,KW_OPEN_NORMAL))
+ {
+ hold=get_unary_expression_tree(NULL,OP_CAST);
+ hold->value_type=parse_type_name(tokens,scope);
+ hold->operand=parse_unary_expression(tokens,scope);
+ return (struct AST*)hold;
+ }else
+ {
+ return (struct AST*)get_unary_expression_tree(parse_unary_expression(tokens,scope),OP_SIZEOF);
+ }
+ default:
+ return parse_postfix_expression(tokens,scope);
+ }
+
+ }
+ /*
+ multiplicative-expression:
+ cast-expression ( ( * | / | % ) cast-expression )*
+ */
+ struct AST* parse_multiplicative_expression(struct Queue *tokens,struct Scope *scope)
+ {
+ struct AST *hold;
+ hold=parse_cast_expression(tokens,scope);
+ while(tokens->size!=0)
+ {
+ switch(((struct token*)tokens->first->data)->type)
+ {
+ case KW_STAR:
+ chomp(tokens);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_cast_expression(tokens,scope),OP_MUL);
+ break;
+ case KW_FORWARD_SLASH:
+ chomp(tokens);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_cast_expression(tokens,scope),OP_DIV);
+ break;
+ case KW_PERCENT:
+ chomp(tokens);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_cast_expression(tokens,scope),OP_REMAINDER);
+ break;
+ default:
+ return hold;
+ }
+ }
+
+ return hold;
+ }
+ /*
+ additive-expression:
+ multiplicative-expression ( ( + | - ) multiplicative )*
+ */
+ struct AST* parse_additive_expression(struct Queue *tokens,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ hold=parse_multiplicative_expression(tokens,scope);
+
+ while(tokens->size!=0)
+ {
+ switch(((struct token*)tokens->first->data)->type)
+ {
+ case KW_PLUS:
+ chomp(tokens);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_multiplicative_expression(tokens,scope),OP_ADDITION);
+ break;
+ case KW_MINUS:
+ chomp(tokens);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_multiplicative_expression(tokens,scope),OP_SUBTRACTION);
+ break;
+ default:
+ return hold;
+ }
+ }
+
+ return hold;
+ }
+ /*
+ bitwise-shift:
+ additive-expression ( ( << | >> ) additive-expression)*
+ */
+ struct AST* parse_shift_expression(struct Queue *tokens,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ hold=parse_additive_expression(tokens,scope);
+
+ while(tokens->size!=0)
+ {
+ switch(((struct token*)tokens->first->data)->type)
+ {
+ case KW_SHIFT_LEFT:
+ chomp(tokens);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_additive_expression(tokens,scope),OP_SHIFT_LEFT);
+ break;
+ case KW_SHIFT_RIGHT:
+ chomp(tokens);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_additive_expression(tokens,scope),OP_SHIFT_RIGHT);
+ break;
+ default:
+ return hold;
+ }
+ }
+ return hold;
+ }
+
+ /*
+ relational-expression:
+ shift-expression ( ( < | > | <= | >= ) shift-expression )*
+ */
+
+ struct AST* parse_relational_expression(struct Queue *tokens,struct Scope *scope)
+ {
+ struct AST *hold;
+ hold=parse_shift_expression(tokens,scope);
+
+ while(tokens->size!=0)
+ {
+ switch(((struct token*)tokens->first->data)->type)
+ {
+ case KW_LESS:
+ chomp(tokens);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(tokens,scope),OP_LESS);
+ break;
+ case KW_LESS_EQ:
+ chomp(tokens);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(tokens,scope),OP_LESS_EQ);
+ break;
+ case KW_MORE:
+ chomp(tokens);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(tokens,scope),OP_GREATER);
+ break;
+ case KW_MORE_EQ:
+ chomp(tokens);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(tokens,scope),OP_GREATER_EQ);
+ break;
+ default:
+ return hold;
+ }
+ }
+ return hold;
+ }
+
+
+ /*
+ equality-expression:
+ realtional-expression ( ( == | != ) relational-expression )*
+ */
+ struct AST* parse_equality_expression(struct Queue *tokens,struct Scope *scope)
+ {
+ struct AST *hold;
+ hold=parse_relational_expression(tokens,scope);
+
+ while(tokens->size!=0)
+ {
+ switch(((struct token*)tokens->first->data)->type)
+ {
+ case KW_EQEQ:
+ chomp(tokens);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_relational_expression(tokens,scope),OP_EQUAL);
+ break;
+ case KW_NOT_EQ:
+ chomp(tokens);
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_relational_expression(tokens,scope),OP_NOT_EQUAL);
+ break;
+ default:
+ return hold;
+ }
+ }
+ return hold;
+ }
+ /*
+ and-expression:
+ equality-expression ( & equality-expression ) *
+ */
+ struct AST* parse_and_expression(struct Queue *tokens,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ hold=parse_equality_expression(tokens,scope);
+ while(get_and_check(tokens,KW_AND))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_equality_expression(tokens,scope),OP_BITWISE_AND);
+ }
+ return hold;
+ }
+ /*
+ exclusive-or-expression:
+ and-expression (^ and-expression)*
+
+ */
+ struct AST* parse_exclusive_or_expression(struct Queue *tokens,struct Scope *scope)
+ {
+ struct AST *hold;
+ hold=parse_and_expression(tokens,scope);
+ while(get_and_check(tokens,KW_HAT))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_and_expression(tokens,scope),OP_BITWISE_XOR);
+ }
+ return hold;
+
+ }
+ /*
+ inclusive-or-expression:
+ exclusive-or-expression (|exclusive-or-expression)*
+ */
+ struct AST* parse_inclusive_or_expression(struct Queue *tokens,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ hold=parse_exclusive_or_expression(tokens,scope);
+ while(get_and_check(tokens,KW_PIPE))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_exclusive_or_expression(tokens,scope),OP_BITWISE_OR);
+ }
+ return hold;
+ }
+ /*
+ logical-and-expression:
+ inclusive-or-expression(&&inclusive-or-expression)*
+ */
+ struct AST* parse_logical_and_expression(struct Queue *tokens,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ hold=parse_inclusive_or_expression(tokens,scope);
+ while(get_and_check(tokens,KW_AND_AND))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_inclusive_or_expression(tokens,scope),OP_LOGICAL_AND);
+ }
+ return hold;
+ }
+ /*
+ logical-or-expression:
+ logical-and-expression ( || logical-and-expression )*
+ */
+ struct AST* parse_logical_or_expression(struct Queue *tokens,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ hold=parse_logical_and_expression(tokens,scope);
+ while(get_and_check(tokens,KW_AND_AND))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_logical_and_expression(tokens,scope),OP_LOGICAL_OR);
+ }
+ return hold;
+ }
+
+ /*
+ conditional-expression:
+ logical-or-expression
+ logical-or-expression?expression:conditional-expression
+ */
+ struct AST* parse_conditional_expression(struct Queue *tokens,struct Scope *scope)
+ {
+
+ struct AST *hold;
+ hold=parse_logical_or_expression(tokens,scope);
+ if(get_and_check(tokens,KW_QUESTION))
+ {
+ hold=(struct AST*)get_conditional_expression_tree(hold,parse_expression(tokens,scope),NULL);
+ if(get_and_check(tokens,KW_COLUMN))
+ {
+ ((struct AST_Conditional_Expression*)hold)->right=parse_conditional_expression(tokens,scope);
+ return hold;
+ }else
+ {
+ return (struct AST*)get_error_tree(hold);
+ }
+ }else
+ {
+ return hold;
+ }
+ }
+ /*
+ assignment-expression:
+ conditional-expression
+ unary-expression ( ( = | += | -= | %= | /= | *= | >>= | <<= | &= | |= | ^= ) assignment-expression
+ */
+ struct AST* parse_assignment_expression(struct Queue *tokens,struct Scope *scope)
+ {
+ struct AST *hold;
+
+ if(tokens->size==0)
+ {
+ /*TODO error*/
+ return (struct AST*)get_error_tree(NULL);
+ }
+
+ hold=parse_conditional_expression(tokens,scope);
+ if(tokens->size==0)
+ return hold;
+ /*TODO make it iterative*/
+ switch(((struct token*)tokens->first->data)->type)
+ {
+ case KW_EQ:
+ chomp(tokens);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_ASSIGN);
+ case KW_PLUS_EQ:
+ chomp(tokens);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_ADD_ASSIGN);
+ case KW_MINUS_EQ:
+ chomp(tokens);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_SUBTRACT_ASSIGN);
+ case KW_PERCENT_EQ:
+ chomp(tokens);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_REMAINDER_ASSIGN);
+ case KW_DIV_EQ:
+ chomp(tokens);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_DIV_ASSIGN);
+ case KW_STAR_EQ:
+ chomp(tokens);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_MULTIPLY_ASSIGN);
+ case KW_SHIFT_RIGHT_EQ:
+ chomp(tokens);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_SHIFT_RIGHT_ASSIGN);
+ case KW_SHIFT_LEFT_EQ:
+ chomp(tokens);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_SHIFT_LEFT_ASSIGN);
+ case KW_AND_EQ:
+ chomp(tokens);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_AND_ASSIGN);
+ case KW_PIPE_EQ:
+ chomp(tokens);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_PIPE_ASSIGN);
+ case KW_HAT_EQ:
+ chomp(tokens);
+ return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_XOR_ASSIGN);
+ default:
+ return hold;
+ }
+
+ }
+ /*
+ comma-expression:
+ assignment-expression(,assignment-expression)*
+ */
+ struct AST* parse_comma_expression(struct Queue *tokens,struct Scope *scope)
+ {
+ struct AST *hold;
+ hold=parse_assignment_expression(tokens,scope);
+ while(get_and_check(tokens,KW_COMMA))
+ {
+ hold=(struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_COMMA);
+ }
+ return hold;
+ }
+
+ #endif
F diff --git a/parse/parse_expression.h b/parse/parse_expression.h
new file mode 100644
--- /dev/null
+++ b/parse/parse_expression.h
+ #ifndef GCC_PARSE_EXPR_H
+ #define GCC_PARSE_EXPR_H GCC_PARSE_EXPR_H
+ #include <chonky.h>
+ #include <queue.h>
+ #include <lexer.h>
+ #include <parse_declaration.h>
+ #include <ast.h>
+ #include<limits.h>
+
+
+ struct AST* parse_expression(struct Queue *tokens,struct Scope *scope);
+ struct AST* parse_const_expression(struct Queue *tokens,struct Scope *scope);
+ struct AST* parse_primary_expression(struct Queue *tokens,struct Scope *scope);
+
+
+ struct AST_Function_Expression* parse_arglist(struct Queue *tokens,struct Scope *scope,struct AST* id);
+ struct AST* parse_postfix_expression(struct Queue *tokens,struct Scope *scope);
+
+ struct AST* parse_cast_expression(struct Queue *tokens,struct Scope *scope);
+ struct AST* parse_unary_expression(struct Queue *tokens,struct Scope *scope);
+
+ struct AST* parse_multiplicative_expression(struct Queue *tokens,struct Scope *scope);
+
+ struct AST* parse_additive_expression(struct Queue *tokens,struct Scope *scope);
+
+ struct AST* parse_shift_expression(struct Queue *tokens,struct Scope *scope);
+
+
+ struct AST* parse_relational_expression(struct Queue *tokens,struct Scope *scope);
+ struct AST* parse_equality_expression(struct Queue *tokens,struct Scope *scope);
+ struct AST* parse_and_expression(struct Queue *tokens,struct Scope *scope);
+ struct AST* parse_exclusive_or_expression(struct Queue *tokens,struct Scope *scope);
+ struct AST* parse_inclusive_or_expression(struct Queue *tokens,struct Scope *scope);
+ struct AST* parse_logical_and_expression(struct Queue *tokens,struct Scope *scope);
+ struct AST* parse_logical_or_expression(struct Queue *tokens,struct Scope *scope);
+ struct AST* parse_conditional_expression(struct Queue *tokens,struct Scope *scope);
+ struct AST* parse_assignment_expression(struct Queue *tokens,struct Scope *scope);
+ struct AST* parse_comma_expression(struct Queue *tokens,struct Scope *scope);
+
+
+
+
+
+ /*
+
+ expression:
+ e15
+ comma-expression:
+ assignment-expression(,assignment-expression)*
+
+ assignment-expression:
+ unary-expression ( ( = | += | -= | %= | /= | *= | >>= | <<= | &= | |= | ^= ) assignment-expression
+
+ conditional-expression:
+ logical-or-expression
+ logical-or-expression?expression:conditional-expression
+ logical-or-expression:
+ logical-and-expression ( || logical-and-expression )*
+ logical-and-expression:
+ inclusive-or-expression(&&inclusive-or-expression)*
+ inclusive-or-expression:
+ exclusive-or-expression (|exclusive-or-expression)*
+ exclusive-or-expression:
+ and-expression (^ and-expression)*
+ and-expression:
+ equality-expression ( & equality-expression ) *
+ equality-expression:
+ realtional-expression ( ( == | != ) relational-expression )*
+ relational-expression:
+ shift-expression ( ( < | > | <= | >= ) shift-expression )*
+
+ shift-expression:
+ additive-expression ( ( << | >> ) additive-expression)*
+
+ additive-expression:
+ multiplicative-expression ( ( + | - ) multiplicative-expression )*
+
+ multiplicative-expression:
+ cast-expression ( ( * | / | % ) cast-expression )*
+
+ unary-expression:
+ ++unary-expression
+ --unary-expression
+ +unary-expression
+ -unary-expression
+ !cast-expression
+ ~cast-expression
+ *cast-expression
+ &cast-expression
+ sizeof ( typename )
+ sizeof unary-expression
+ postfix-expression
+
+ cast-expression:
+ unary-expression
+ (type)cast-expression
+
+
+ arglist:
+ epsilon
+ assignment-expression-list(,assignment-expression-list)*
+ postfix_expression:
+ postfix_expression ++
+ postfix_expression --
+ postfix_expression [ expression ]
+ postfix_expression.id
+ postfix_expression->id
+ postfix_expression ( arglist )
+
+
+ primary_expression
+
+ primary-expression:
+ number
+ string
+ id
+ (e)
+
+ */
+
+
+ #endif
F diff --git a/parse/parse_statement.c b/parse/parse_statement.c
new file mode 100644
--- /dev/null
+++ b/parse/parse_statement.c
+ #ifndef PARSE_GCC_STATEMENT_C
+ #define PARSE_GCC_STATEMENT_C PARSE_GCC_STATEMENT_C
+ #include "parse_statement.h"
+ #include "parse_declaration.h"
+
+
+ struct AST* parse_statement(struct Queue* tokens,struct Scope *scope)
+ {
+
+ if(tokens->size==0)
+ return NULL;
+
+
+
+ switch(kw_get(tokens))
+ {
+ case KW_NOTYPE:
+ return (struct AST*)get_error_tree(NULL);
+
+ case KW_OPEN_CURLY:
+ chomp(tokens);
+ return parse_finish_compound_statement(tokens,scope);
+ case KW_IF:
+ chomp(tokens);
+ return parse_finish_if_statement(tokens,scope);
+ case KW_SWITCH:
+ chomp(tokens);
+ return parse_finish_switch_statement(tokens,scope);
+ case KW_WHILE:
+ chomp(tokens);
+ return parse_finish_while_statement(tokens,scope);
+ case KW_DO:
+ chomp(tokens);
+ return parse_finish_do_while_statement(tokens,scope);
+ case KW_FOR:
+ chomp(tokens);
+ return parse_finish_for_statement(tokens,scope);
+ case KW_GOTO:
+ chomp(tokens);
+ return parse_finish_goto_statement(tokens,scope);
+ case KW_CASE:
+ chomp(tokens);
+ return parse_finish_labeled_statement(tokens,scope,ST_CASE);
+ case KW_DEFAULT:
+ chomp(tokens);
+ return parse_finish_default_statement(tokens,scope);
+ case KW_ID:
+ /*TODO check if id is in function scope*/
+ if(0)
+ {
+ return parse_finish_labeled_statement(tokens,scope,ST_LABEL);
+ }else
+ {
+ return parse_expression_statement(tokens,scope);
+ }
+ case KW_CONTINUE:
+ chomp(tokens);
+ return parse_finish_continue_statement(tokens);
+ case KW_BREAK:
+ chomp(tokens);
+ return parse_finish_break_statement(tokens);
+ case KW_RETURN:
+ chomp(tokens);
+ return parse_finish_return_statement(tokens,scope);
+ default:
+ return parse_expression_statement(tokens,scope);
+
+ }
+
+ }
+ /*
+ ( declaration | statement )* }
+ */
+ struct AST* parse_finish_compound_statement(struct Queue* tokens,struct Scope *scope)
+ {
+ struct AST_Compound_Statement *hold;
+ hold=get_compound_statement_tree(scope);
+ while(!get_and_check(tokens,KW_CLOSE_CURLY))
+ {
+ if(is_type(tokens,hold->scope))
+ {
+ parse_declaration(tokens,hold->scope,&hold->components,0);
+ }else
+ {
+ Queue_Push(&hold->components,parse_statement(tokens,hold->scope));
+ }
+ }
+
+ return (struct AST*)hold;
+ }
+ /*
+ ( expression ) statement
+ ( expression ) statement else statement
+ */
+ struct AST* parse_finish_if_statement(struct Queue* tokens,struct Scope *scope)
+ {
+ struct AST_If_Statement *hold;
+ hold=get_if_statement_tree();
+ if(get_and_check(tokens,KW_OPEN_NORMAL))
+ {
+ hold->condition=parse_expression(tokens,scope);
+ if(get_and_check(tokens,KW_CLOSE_NORMAL))
+ {
+ hold->body_statement=parse_statement(tokens,scope);
+ }else
+ {
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+ if(get_and_check(tokens,KW_ELSE))
+ {
+ hold->else_statement=parse_statement(tokens,scope);
+ return (struct AST*)hold;
+ }else
+ {
+ hold->else_statement=NULL;
+ return (struct AST*)hold;
+ }
+ }else
+ {
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+ return (struct AST*)hold;
+ }
+ /*
+ ( expression ) statement
+ */
+ struct AST* parse_finish_switch_statement(struct Queue* tokens,struct Scope *scope)
+ {
+ struct AST_Switch_Statement *hold;
+ hold=get_switch_statement_tree();
+ if(get_and_check(tokens,KW_OPEN_NORMAL))
+ {
+ hold->condition=parse_expression(tokens,scope);
+ if(get_and_check(tokens,KW_CLOSE_NORMAL))
+ {
+ hold->body_statement=parse_statement(tokens,scope);
+ }else
+ {
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+ }else
+ {
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+
+ return (struct AST*)hold;
+ }
+ /*
+ ( expression ) statement
+
+ */
+ struct AST* parse_finish_while_statement(struct Queue* tokens,struct Scope *scope)
+ {
+ struct AST_While_Statement *hold;
+ hold=get_while_statement_tree();
+ if(get_and_check(tokens,KW_OPEN_NORMAL))
+ {
+ hold->condition=parse_expression(tokens,scope);
+ if(get_and_check(tokens,KW_CLOSE_NORMAL))
+ {
+ hold->body_statement=parse_statement(tokens,scope);
+ }else
+ {
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+ }else
+ {
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+
+ return (struct AST*)hold;
+ }
+ /*
+ statement while ( expression ) ;
+ */
+ struct AST* parse_finish_do_while_statement(struct Queue* tokens,struct Scope *scope)
+ {
+ struct AST_Do_While_Statement *hold;
+ hold=get_do_while_statement_tree();
+ hold->body_statement=parse_statement(tokens,scope);
+ if(get_and_check(tokens,KW_WHILE) && get_and_check(tokens,KW_OPEN_NORMAL))
+ {
+ hold->condition=parse_expression(tokens,scope);
+
+ if(get_and_check(tokens,KW_CLOSE_NORMAL) && get_and_check(tokens,KW_SEMI_COLUMN))
+ {
+ return (struct AST*)hold;
+ }else
+ {
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+ }else
+ {
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+
+ }
+ /*
+ ( [ expression ] ; [ expression ] ; [ expression ] ) statement
+ */
+ struct AST* parse_finish_for_statement(struct Queue* tokens,struct Scope *scope)
+ {
+ struct AST_For_Statement *hold;
+ hold=get_for_statement_tree();
+ if(!get_and_check(tokens,KW_OPEN_NORMAL))
+ return (struct AST*)get_error_tree((struct AST*)hold);
+
+ hold->initialisation=parse_expression_statement(tokens,scope);
+ hold->condition=parse_expression_statement(tokens,scope);
+ if(get_and_check(tokens,KW_CLOSE_NORMAL))
+ {
+ hold->update=get_nop_tree();
+ }else
+ {
+ hold->update=parse_expression(tokens,scope);
+ if(!get_and_check(tokens,KW_CLOSE_NORMAL))
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+ hold->body_statement=parse_statement(tokens,scope);
+ return (struct AST*)hold;
+ }
+ /*
+ id ;
+ */
+ struct AST* parse_finish_goto_statement(struct Queue* tokens,struct Scope *scope)
+ {
+ struct AST* ret;
+
+ if(check(tokens,KW_ID,0))
+ {
+ ret=(struct AST*)get_goto_statement_tree(Queue_Pop(tokens),scope);
+ if(get_and_check(tokens,KW_SEMI_COLUMN))
+ {
+ return ret;
+ }else
+ {
+ return (struct AST*)get_error_tree(ret);
+ }
+ }
+ else
+ {
+ return (struct AST*)get_error_tree((struct AST*)get_goto_statement_tree(NULL,NULL));
+ }
+
+ }
+ /*
+ ;
+ */
+ struct AST* parse_finish_continue_statement(struct Queue* tokens)
+ {
+ struct AST *hold;
+ hold=malloc(sizeof(struct AST));
+ hold->type=ST_CONTINUE;
+ if(get_and_check(tokens,KW_SEMI_COLUMN))
+ {
+ return hold;
+ }else
+ {
+ return (struct AST*)get_error_tree(hold);
+ }
+ }
+ /*
+ ;
+ */
+ struct AST* parse_finish_break_statement(struct Queue* tokens)
+ {
+ struct AST *hold;
+ hold=malloc(sizeof(struct AST));
+ hold->type=ST_BREAK;
+ if(get_and_check(tokens,KW_SEMI_COLUMN))
+ {
+ return hold;
+ }else
+ {
+ return (struct AST*)get_error_tree(hold);
+ }
+ }
+ /*
+ id:
+ statement
+ */
+ struct AST* parse_finish_labeled_statement(struct Queue* tokens,struct Scope *scope,enum AST_Type type)
+ {
+ struct AST_Labeled_Statement *ret;
+ if(check(tokens,KW_ID,0))
+ {
+ ret=get_labeled_statement_tree(Queue_Pop(tokens),NULL,scope,type);
+ if(get_and_check(tokens,KW_COLUMN))
+ {
+ ret->statement=parse_statement(tokens,scope);
+ return (struct AST*)ret;
+ }else
+ {
+ return (struct AST*)get_error_tree((struct AST*)ret);
+ }
+ }else
+ {
+ return (struct AST*)get_error_tree(NULL);
+ }
+ }
+ /*
+ :
+ statement
+ */
+ struct AST* parse_finish_default_statement(struct Queue* tokens,struct Scope *scope)
+ {
+ struct AST_Labeled_Statement *ret;
+ ret=get_labeled_statement_tree(NULL,NULL,scope,ST_DEFAULT);
+ if(get_and_check(tokens,KW_COLUMN))
+ {
+ ret->statement=parse_statement(tokens,scope);
+ return (struct AST*)ret;
+ }else
+ {
+ return (struct AST*)get_error_tree((struct AST*)ret);
+ }
+ }
+ /*
+ [ expression ] ;
+
+ */
+ struct AST* parse_finish_return_statement(struct Queue* tokens,struct Scope *scope)
+ {
+ struct AST_Return_Statement *hold;
+ if(get_and_check(tokens,KW_SEMI_COLUMN))
+ {
+ hold=get_return_statement_tree(get_nop_tree());
+ return (struct AST*)hold;
+ }
+
+
+ hold=get_return_statement_tree(parse_expression(tokens,scope));
+ if(get_and_check(tokens,KW_SEMI_COLUMN))
+ {
+ return (struct AST*)hold;
+ }else
+ {
+ return (struct AST*)get_error_tree((struct AST*)hold);
+ }
+ }
+ /*
+
+ [ expression ] ;
+
+ */
+ struct AST* parse_expression_statement(struct Queue* tokens,struct Scope *scope)
+ {
+ struct AST *hold;
+ if(get_and_check(tokens,KW_SEMI_COLUMN))
+ {
+ hold=get_nop_tree();
+ return (struct AST*)hold;
+ }
+ hold=parse_expression(tokens,scope);
+ if(get_and_check(tokens,KW_SEMI_COLUMN))
+ {
+ return hold;
+ }else
+ {
+ return (struct AST*)get_error_tree(hold);
+ }
+ }
+ #endif
F diff --git a/parse/parse_statement.h b/parse/parse_statement.h
new file mode 100644
--- /dev/null
+++ b/parse/parse_statement.h
+ #ifndef PARSE_GCC_STATEMENT_H
+ #define PARSE_GCC_STATEMENT_H PARSE_GCC_STATEMENT_H
+ #include <all.h>
+
+ struct Queue;
+ struct Scope;
+ enum AST_Type;
+
+ struct AST* parse_finish_compound_statement(struct Queue* tokens,struct Scope *scope);
+ struct AST* parse_op_e_cl_st(struct Queue* tokens,struct Scope *scope);
+ struct AST* parse_finish_if_statement(struct Queue* tokens,struct Scope *scope);
+ struct AST* parse_finish_switch_statement(struct Queue* tokens,struct Scope *scope);
+ struct AST* parse_finish_do_while_statement(struct Queue* tokens,struct Scope *scope);
+ struct AST* parse_finish_while_statement(struct Queue* tokens,struct Scope *scope);
+ struct AST* parse_finish_for_statement(struct Queue* tokens,struct Scope *scope);
+ struct AST* parse_finish_goto_statement(struct Queue* tokens,struct Scope *scope);
+ struct AST* parse_finish_continue_statement(struct Queue* tokens);
+ struct AST* parse_finish_break_statement(struct Queue* tokens);
+ struct AST* parse_finish_return_statement(struct Queue* tokens,struct Scope *scope);
+ struct AST* parse_expression_statement(struct Queue* tokens,struct Scope *scope);
+ struct AST* parse_finish_labeled_statement(struct Queue* tokens,struct Scope *scope,enum AST_Type type);
+ struct AST* parse_finish_default_statement(struct Queue* tokens,struct Scope *scope);
+
+
+
+ #endif
F diff --git a/parse/parse_translation_unit.c b/parse/parse_translation_unit.c
new file mode 100644
--- /dev/null
+++ b/parse/parse_translation_unit.c
+ #ifndef GCC_PARSE_TRANSLATION_C
+ #define GCC_PARSE_TRANSLATION_C GCC_PARSE_TRANSLATION_C
+ #include "parse_declaration.h"
+ #include "parse_statement.h"
+ /*
+ translation-unit:
+ declaration [ translation-unit ]
+ function-definition [ translation-unit ]
+ */
+ struct AST* parse_translation_unit(struct Queue *tokens,struct Scope *scope)
+ {
+ struct AST_Translation_Unit *hold;
+ hold=get_translation_unit_tree(scope);
+ while(tokens->size>0)
+ {
+ parse_declaration(tokens,hold->scope,&hold->components,1);
+ }
+ return (struct AST*)hold;
+
+ }
+
+ #endif
F diff --git a/parse/parse_translation_unit.h b/parse/parse_translation_unit.h
new file mode 100644
--- /dev/null
+++ b/parse/parse_translation_unit.h
+ #ifndef GCC_PARSE_TRANSLATION_H
+ #define GCC_PARSE_TRANSLATION_H GCC_PARSE_TRANSLATION_H
+
+ struct AST* parse_translation_unit(struct Queue *tokens,struct Scope *scope);
+
+ #endif
F diff --git a/parse_declaration.c b/parse_declaration.c
deleted file mode 100644
--- a/parse_declaration.c
+++ /dev/null
- #ifndef GCC_PARSE_DECLARATION_C
- #define GCC_PARSE_DECLARATION_C GCC_PARSE_DECLARATION_C
- #include"parse_declaration.h"
-
- /*declaration-specifiers init-declarator (,init-declarator)* ;*/
- /* init-declarator: declarator [ = initializer ] */
- void parse_declaration(struct Queue *tokens,struct Scope *scope,struct Queue *where_to_push,char parse_function_definitions)
- {
- struct Denotation_Prototype *prototype;
- struct Denoted *hold;
-
- prototype=parse_declaration_specifiers(tokens,scope);
- while(1)
- {
- if(get_and_check(tokens,KW_SEMI_COLUMN))
- return;
- hold=parse_declarator(tokens,scope,prototype);
- if(hold->denotation==DT_Function && parse_function_definitions==1)
- {
- if(get_and_check(tokens,KW_OPEN_CURLY))
- {
- ((struct Denoted_Function*)hold)->body=(struct AST_Compound_Statement*)parse_finish_compound_statement(tokens,scope);
- Queue_Push(where_to_push,get_function_definition_tree(scope,(struct Denoted_Function*)hold));
- Scope_Push(scope,hold);
- free(prototype);
- return;
- }
-
- Queue_Push(where_to_push,get_function_declaration_tree(scope,(struct Denoted_Function*)hold));
- }else if(hold->denotation==DT_Typedef)
- {
- Queue_Push(where_to_push,get_type_definition_tree((struct Denoted_Typedef*)hold,scope));
- }else if(hold->denotation==DT_Object)
- {
- Queue_Push(where_to_push,get_object_declaration_tree((struct Denoted_Object*)hold,NULL,scope));
- }else
- {
- /*TODO error*/
- Queue_Push(where_to_push,get_declaration_error_tree(hold));
- free(prototype);
- return;
- }
-
- Scope_Push(scope,hold);
- parse_function_definitions=0;
- if(!get_and_check(tokens,KW_COMMA))
- {
- if(get_and_check(tokens,KW_SEMI_COLUMN))
- {
- return;
- }else
- {
- /*TODO error*/
- Queue_Push(where_to_push,get_declaration_error_tree(NULL));
- return;
- }
- }
- }
- free(prototype);
-
- }
-
-
- struct Denotation_Prototype* parse_specifier_qualifier_list(struct Queue *tokens,struct Scope *scope)
- {
- return parse_declaration_specifiers_inner(tokens,scope,0);
- }
- struct Denotation_Prototype* parse_declaration_specifiers(struct Queue *tokens,struct Scope *scope)
- {
- return parse_declaration_specifiers_inner(tokens,scope,1);
- }
-
- /*declaration-specifiers:
- ( storage-class-specifier type-specifier type-qualifier function-specifier)* */
- struct Denotation_Prototype* parse_declaration_specifiers_inner(struct Queue *tokens,struct Scope *scope,char parse_storage_class)
- {
- enum KEYWORDS hold_kw;
- struct Denotation_Prototype *ret;
- ret=(struct Denotation_Prototype*)get_denotation_prototype();
-
- while(1)
- {
- hold_kw=kw_get(tokens);
- switch(hold_kw)
- {
- case KW_CONST:
- chomp(tokens);
- ret->is_const=1;
- break;
- case KW_VOLATILE:
- chomp(tokens);
- ret->is_volatile=1;
- break;
- case KW_INT:
- chomp(tokens);
- if(ret->specifier!=TS_NONE)
- {
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->specifier=TS_INT;
- break;
- case KW_VOID:
- chomp(tokens);
- if(ret->specifier!=TS_NONE)
- {
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->specifier=TS_VOID;
- break;
- case KW_CHAR:
- chomp(tokens);
- if(ret->specifier!=TS_NONE)
- {
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->specifier=TS_CHAR;
- break;
- case KW_DOUBLE:
- chomp(tokens);
- if(ret->specifier!=TS_NONE)
- {
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->specifier=TS_DOUBLE;
- break;
- case KW_FLOAT:
- chomp(tokens);
- if(ret->specifier!=TS_NONE)
- {
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->specifier=TS_FLOAT;
- break;
- case KW_LONG:
- chomp(tokens);
- if(ret->constraint!=TC_NONE)
- {
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->constraint=TC_LONG;
- break;
- case KW_SHORT:
- chomp(tokens);
- if(ret->constraint!=TC_NONE)
- {
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->constraint=TC_SHORT;
- break;
- case KW_EXTERN:
- if(!parse_storage_class)
- goto exit;
- chomp(tokens);
- if(ret->storage_class!=SC_NONE)
- {
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->storage_class=SC_EXTERN;
- break;
- case KW_STATIC:
- if(!parse_storage_class)
- goto exit;
- chomp(tokens);
- if(ret->storage_class!=SC_NONE)
- {
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->storage_class=SC_STATIC;
- break;
- case KW_TYPEDEF:
- if(!parse_storage_class)
- goto exit;
- chomp(tokens);
- if(ret->storage_class!=SC_NONE)
- {
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- ret->storage_class=SC_TYPEDEF;
- break;
- case KW_STRUCT:
- ret->specifier=TS_STRUCT;
- goto hack;
- case KW_UNION:
- ret->specifier=TS_UNION;
- hack:
- chomp(tokens);
- if(check(tokens,KW_ID,0))
- {
- struct token *id;
- struct Denoted_Struct_Union *tag;
- id=Queue_Pop(tokens);
- tag=(struct Denoted_Struct_Union*)check_tag(scope,id);
-
- if(tag==NULL)
- {
- struct Struct_Union *body;
- body=get_struct_union_base(scope,ret->specifier);
- Scope_Push(scope,get_denoted_struct_union(id,body));
-
- parse_struct_union_specifier_finish(tokens,scope,body);
- ret->struct_union=body;
- }else
- {
- ret->struct_union=tag->struct_union;
- if(ret->struct_union->specifier!=ret->specifier)
- {
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- if(ret->struct_union->is_finished==0)
- {
- /*then this could be a definition*/
- parse_struct_union_specifier_finish(tokens,scope,ret->struct_union);
- }
- }
-
- }else
- {
- ret->struct_union=get_struct_union_base(scope,ret->specifier);
- parse_struct_union_specifier_finish(tokens,scope,ret->struct_union);
- }
- break;
- case KW_ENUM:
- chomp(tokens);
- ret->specifier=TS_ENUM;
- if(check(tokens,KW_ID,0))
- {
- struct token *id;
- struct Denoted_Enum *enumerator;
- id=Queue_Pop(tokens);
- enumerator=(struct Denoted_Enum*)check_tag(scope,id);
- if(enumerator==NULL)
- {
- struct Enum *body;
- body=get_enum_base();
- Scope_Push(scope,get_denoted_enum(id,body));
- parse_enum_specifier_finish(tokens,scope,body);
- ret->enumerator=body;
- }else
- {
- ret->enumerator=enumerator->enumeration;
- if(enumerator->denotation!=DT_Enum)
- {
- return (struct Denotation_Prototype*)get_denoted_error((struct Denoted*)ret);
- }
- if(ret->enumerator->is_finished==0)
- {
- /*this could be an enum definition*/
- parse_enum_specifier_finish(tokens,scope,ret->enumerator);
- }
- }
-
- }else
- {
- parse_enum_specifier_finish(tokens,scope,ret->enumerator);
- }
- break;
- case KW_ID:
- if(ret->specifier==TS_NONE)
- {
- struct Denoted *hold;
- hold=check_ordinary(scope,(struct token*)tokens->first->data);
- if(hold!=NULL && hold->denotation==DT_Typedef)
- {
- ret->type=((struct Denoted_Typedef*)hold)->type;
- chomp(tokens);
- break;
- }
- /*falltrough - this has not been typedefed*/
- }
- /*falltrough (it is possible to overwrite typedef id from upper scope)*/
- default:
- exit:
- if(ret->specifier==TS_ENUM)
- {
- ret->type=get_enum_type(ret);
- }else if(ret->specifier==TS_STRUCT || ret->specifier==TS_UNION)
- {
- ret->type=get_struct_union_type(ret);
- }else if(ret->type==NULL)
- {
- ret->type=get_basic_type(ret);
- }
- return ret;
- }
- }
- }
-
-
-
-
-
- /*
- declarator:
- ( pointer ( type-qualifier )* )* direct-declarator
- */
- struct Denoted* parse_declarator(struct Queue *tokens,struct Scope *scope,struct Denotation_Prototype *prototype)
- {
- struct Denoted_Base temp;
- temp.id=NULL;
- temp.denotation=DT_Prototype;
- temp.type=prototype->type;
- parse_declarator_inner(tokens,scope,&temp);
- return extract_denoted(&temp,prototype,0);
-
- }
-
- void parse_declarator_inner(struct Queue *tokens,struct Scope *scope,struct Denoted_Base *base)
- {
- enum KEYWORDS hold;
- while(get_and_check(tokens,KW_STAR))
- {
- base->type=get_pointer_type(base->type);
- hold=kw_get(tokens);
- while(1)
- {
- if(hold==KW_CONST)
- {
- ((struct Type_Pointer*)(base->type))->is_const=1;
- }else if(hold==KW_VOLATILE)
- {
- ((struct Type_Pointer*)(base->type))->is_volatile=1;
- }else
- {
- break;
- }
- }
- }
- parse_direct_declarator(tokens,scope,base);
-
- }
- /*
- direct-declarator:
- id direct-declarator-finish
- ( declarator ) direct-declarator-finish
- */
- void parse_direct_declarator(struct Queue *tokens,struct Scope *scope,struct Denoted_Base *base)
- {
- if(check(tokens,KW_ID,0))
- {
- base->id=Queue_Pop(tokens);
- parse_direct_declarator_finish(tokens,scope,base);
-
- }else if(get_and_check(tokens,KW_OPEN_NORMAL))
- {
- struct Queue *hack;
- hack=malloc(sizeof(struct Queue));
- Queue_Init(hack);
- while(!check(tokens,KW_CLOSE_NORMAL,0))
- {
- Queue_Push(hack,Queue_Pop(tokens));
- }
- /*remove closing )*/
- chomp(tokens);
- parse_direct_declarator_finish(tokens,scope,base);
- parse_declarator_inner(hack,scope,base);
- if(hack->size!=0)
- {
- /*TODO error*/
- base->denotation=DT_Error;
- while(hack->size)
- {
- free(Queue_Pop(hack));
- }
- free(hack);
- return;
- }
- free(hack);
-
- }else
- {
- /*this might be an abstract declarator*/
- parse_direct_declarator_finish(tokens,scope,base);
- }
- }
-
- /*
- direct-declarator-finish:
- ( [ constant-expression ] | (parameter-list) | ( [id-list] ) )*
- */
- void parse_direct_declarator_finish(struct Queue *tokens,struct Scope *scope,struct Denoted_Base *base)
- {
- while(1)
- {
- if(get_and_check(tokens,KW_OPEN_SQUARE))
- {
- base->type=get_array_type(base->type,parse_expression(tokens,scope));
- if(!get_and_check(tokens,KW_CLOSE_NORMAL))
- {
- base->type=get_type_error(base->type);
- base->denotation=DT_Error;
- return;
- }
- }else if(get_and_check(tokens,KW_OPEN_NORMAL))
- {
- struct Queue *parameters;
- struct Scope *function_prototype_scope;
-
- function_prototype_scope=get_scope(scope);
-
- parameters=malloc(sizeof(struct Queue));
- Queue_Init(parameters);
-
- parse_paramenter_list(tokens,function_prototype_scope,parameters);
- base->type=get_function_type(base->type,parameters,function_prototype_scope);
-
- }else
- {
- break;
- }
-
- }
-
- }
-
-
- /*
- struct-union-specifier-finish:
- { ( struct-declaration )* }
- */
- void parse_struct_union_specifier_finish(struct Queue *tokens,struct Scope *scope,struct Struct_Union *base)
- {
- if(get_and_check(tokens,KW_OPEN_CURLY))
- {
- base->is_finished=1;
- while(parse_struct_declaration(tokens,base->inner_namespace,base->members))
- {
-
- if(get_and_check(tokens,KW_CLOSE_CURLY))
- {
- return ;
- }
- }
-
- /*TODO error*/
- return ;
-
-
- }else
- {
- /*if this isnt a struct definition return an incomplete struct-union*/
- return ;
-
- }
-
- }
- /*
- struct-declaration:
- specifier-qualifier-list ( struct-declarator )* ;
- */
- char parse_struct_declaration(struct Queue *tokens,struct Scope *struct_scope,struct Queue* members)
- {
- struct Denotation_Prototype *prototype;
- struct Denoted *hold;
- prototype=parse_specifier_qualifier_list(tokens,struct_scope);
- while(1)
- {
- hold=parse_struct_declarator(tokens,struct_scope,prototype);
- if(hold!=NULL && hold->denotation!=DT_Error)
- {
- Scope_Push(struct_scope,hold);
- Queue_Push(members,hold);
-
- }else
- {
- free(prototype);
- /*todo error*/
- return 0;
- }
- if(!get_and_check(tokens,KW_COMMA))
- {
- if(get_and_check(tokens,KW_SEMI_COLUMN))
- {
- break;
- }else
- {
- free(prototype);
- /*todo error*/
- return 0;
- }
- }
- }
- free(prototype);
- return 1;
-
- }
- /*
- struct-declarator:
- declarator
- [ declarator ] : constant-expression
- */
- struct Denoted* parse_struct_declarator(struct Queue *tokens,struct Scope *scope,struct Denotation_Prototype *prototype)
- {
- struct Denoted *hold;
- if(get_and_check(tokens,KW_COLUMN))
- {
- /*unnamed bitfields are possible*/
- struct Denoted_Object *obj;
- obj=(struct Denoted_Object*)get_denoted_object(NULL,SC_NONE,prototype->type);
- obj->object->type=get_type_bitfield(prototype->type,parse_expression(tokens,scope));
- return (struct Denoted*)obj;
-
- }else
- {
- hold=parse_declarator(tokens,scope,prototype);
- if(get_and_check(tokens,KW_COLUMN))
- {
- if(hold->denotation==DT_Object)
- {
- ((struct Denoted_Object*)hold)->object->type=get_type_bitfield(((struct Denoted_Object*)hold)->object->type,parse_expression(tokens,scope));
- return hold;
- }else
- {
- /*TODO error*/
- return get_denoted_error(hold);
- }
- }else
- {
- return hold;
- }
- }
-
- }
- /*
- enum-specifier-finish
- { ( enumeration-constant [ = constant-expression ] , )* }
- */
- void parse_enum_specifier_finish(struct Queue *tokens,struct Scope *scope,struct Enum *enumeration)
- {
- struct token *id;
- struct Denoted_Enum_Const *hold;
- int where_in_enumeration=0;
- if(get_and_check(tokens,KW_OPEN_CURLY))
- {
- enumeration->is_finished=1;
- do
- {
- if(check(tokens,KW_ID,0))
- {
- id=Queue_Pop(tokens);
- if(get_and_check(tokens,KW_EQ))
- {
- hold=(struct Denoted_Enum_Const*)get_denoted_enum_const_expr(id,enumeration,parse_expression(tokens,scope));
- Queue_Push(enumeration->consts,hold);
- where_in_enumeration=hold->value+1;
- }else
- {
- Queue_Push(enumeration->consts,get_denoted_enum_const_num(id,enumeration,where_in_enumeration));
- ++where_in_enumeration;
- }
- if(!get_and_check(tokens,KW_COMMA) && get_and_check(tokens,KW_CLOSE_CURLY))
- {
- return;
- }else
- {
- /*TODO error*/
- Queue_Push(enumeration->consts,get_denoted_error(NULL));
- return ;
- }
- }else
- {
- /*TODO error*/
- Queue_Push(enumeration->consts,get_denoted_error(NULL));
- return ;
- }
- }while(!get_and_check(tokens,KW_CLOSE_CURLY));
-
- }
- }
-
- /*
- parameter-list:
- (declaratoion-specifiers (declarator | abstract-declarator),)+
- */
- void parse_paramenter_list(struct Queue *tokens,struct Scope *function_prototype_scope,struct Queue *parameters)
- {
- if(get_and_check(tokens,KW_CLOSE_NORMAL))
- return;
-
- struct Denotation_Prototype *prototype;
- struct Denoted_Base temp;
- struct Denoted *hold;
- temp.denotation=DT_Prototype;
- do
- {
- prototype=parse_declaration_specifiers(tokens,function_prototype_scope);
-
- temp.id=NULL;
- temp.type=prototype->type;
-
- parse_declarator_inner(tokens,function_prototype_scope,&temp);
-
- hold=extract_denoted(&temp,prototype,1);
-
- Scope_Push(function_prototype_scope,hold);
- Queue_Push(parameters,hold);
-
- free(prototype);
- }while(get_and_check(tokens,KW_COMMA));
- if(!get_and_check(tokens,KW_CLOSE_NORMAL))
- {
- /*TODO error*/
- Queue_Push(parameters,get_denoted_error(NULL));
- return;
- }
-
- }
- /*
- type-name:
- specifier-qualifier-list [abstract-declarator]
- */
- struct Type* parse_type_name(struct Queue *tokens,struct Scope *scope)
- {
- struct Denotation_Prototype *prototype;
- struct Type *ret;
- prototype=parse_specifier_qualifier_list(tokens,scope);
- ret=parse_abstract_declarator(tokens,scope,prototype->type);
- free(prototype);
- return ret;
- }
- /*
- abstract-declarator:
- ( pointer )* abstract-direct-declarator
- */
- struct Type* parse_abstract_declarator(struct Queue *tokens,struct Scope *scope,struct Type *base)
- {
- struct Denoted_Base hold;
- hold.denotation=DT_Prototype;
- hold.id=NULL;
- hold.type=base;
- parse_declarator_inner(tokens,scope,&hold);
-
- if(hold.denotation==DT_Error || hold.id!=NULL)
- {
- /*TODO error*/
- return get_type_error(hold.type);
- }
- return hold.type;
- }
-
- /*
- initializer:
- assignment-expression
- { initializer , ... [,] }
- */
- struct AST* parse_initializer(struct Queue *tokens,struct Scope *scope,struct Denoted_Object *base)
- {
-
- }
-
- const const const const const const const const const const const const const const const const const const const const const const const char const const const constant;
- #endif
F diff --git a/parse_declaration.h b/parse_declaration.h
deleted file mode 100644
--- a/parse_declaration.h
+++ /dev/null
- #ifndef GCC_PARSE_DECLARATION_H
- #define GCC_PARSE_DECLARATION_H GCC_PARSE_DECLARATION_H
- #include "ast.h"
- #include "parse_expression.h"
- #include "parse_statement.h"
- #include "type.h"
- #include "denoted.h"
- #include "scope.h"
- #include "queue.h"
- #include "map.h"
- #include "lexer.h"
- #include <assert.h>
-
- struct Denoted_Base;
- struct Denotation_Prototype;
- struct Struct_Union;
- struct Denoted_Object;
- struct Enum;
-
-
- void parse_declaration(struct Queue *tokens,struct Scope *scope,struct Queue *where_to_push,char parse_function_definitions);
- struct Denotation_Prototype* parse_specifier_qualifier_list(struct Queue *tokens,struct Scope *scope);
- struct Denotation_Prototype* parse_declaration_specifiers(struct Queue *tokens,struct Scope *scope);
- struct Denotation_Prototype* parse_declaration_specifiers_inner(struct Queue *tokens,struct Scope *scope,char parse_storage_class);
- struct Denoted* parse_declarator(struct Queue *tokens,struct Scope *scope,struct Denotation_Prototype *prototype);
- void parse_declarator_inner(struct Queue *tokens,struct Scope *scope,struct Denoted_Base *base);
- void parse_direct_declarator(struct Queue *tokens,struct Scope *scope,struct Denoted_Base *base);
- void parse_direct_declarator_finish(struct Queue *tokens,struct Scope *scope,struct Denoted_Base *base);
- void parse_struct_union_specifier_finish(struct Queue *tokens,struct Scope *scope,struct Struct_Union *base);
- char parse_struct_declaration(struct Queue *tokens,struct Scope *struct_scope,struct Queue* members);
- struct Denoted* parse_struct_declarator(struct Queue *tokens,struct Scope *scope,struct Denotation_Prototype *prototype);
- void parse_enum_specifier_finish(struct Queue *tokens,struct Scope *scope,struct Enum *enumeration);
- void parse_paramenter_list(struct Queue *tokens,struct Scope *function_prototype_scope,struct Queue *parameters);
- struct Type* parse_type_name(struct Queue *tokens,struct Scope *scope);
- struct Type* parse_abstract_declarator(struct Queue *tokens,struct Scope *scope,struct Type *base);
- struct AST* parse_initializer(struct Queue *tokens,struct Scope *scope,struct Denoted_Object *base);
-
- #endif
F diff --git a/parse_expression.c b/parse_expression.c
deleted file mode 100644
--- a/parse_expression.c
+++ /dev/null
- #ifndef GCC_PARSE_EXPR_C
- #define GCC_PARSE_EXPR_C GCC_PARSE_EXPR_C
- #include "parse_expression.h"
-
-
-
- struct AST* parse_expression(struct Queue *tokens,struct Scope *scope)
- {
- return parse_comma_expression(tokens,scope);
- }
-
- struct AST* parse_const_expression(struct Queue *tokens,struct Scope *scope)
- {
- return parse_comma_expression(tokens,scope);
- }
- /*
- primary-expression:
- number
- string
- id
- (e)
- generic-selection
-
- */
- struct AST* parse_primary_expression(struct Queue *tokens,struct Scope *scope)
- {
- struct token *hold_token;
- struct AST *hold;
-
- if(tokens->size==0)
- {
- /*TODO error*/
- return (struct AST*)get_error_tree(NULL);
- }
- hold_token=Queue_Pop(tokens);
- switch(hold_token->type)
- {
- case KW_NUMBER:
- case KW_STRING:
- return (struct AST*)get_rvalue_expression_tree(hold_token);
- case KW_ID:
- return (struct AST*)get_lvalue_expression_tree(hold_token,scope);
- case KW_OPEN_NORMAL:
- hold=parse_expression(tokens,scope);
- if(get_and_check(tokens,KW_CLOSE_NORMAL))
- {
- return (struct AST*)hold;
- }else
- {
- /*TODO error*/
- return (struct AST*)get_error_tree(hold);
- }
- default:
- /*TODO error*/
- return (struct AST*)get_error_tree(NULL);
- }
-
- /*just in case*/
- return (struct AST*)get_error_tree(NULL);
-
- }
-
-
- /*
- arglist:
- (e)*\)
-
- */
- struct AST_Function_Expression* parse_arglist(struct Queue *tokens,struct Scope *scope,struct AST* id)
- {
- struct AST_Function_Expression *ret;
- ret=get_function_expression_tree(id,scope);
- ret->id=id;
- if(get_and_check(tokens,KW_CLOSE_NORMAL))
- {
- return ret;
- }
- do
- {
- Queue_Push(&ret->arguments,parse_assignment_expression(tokens,scope));
- } while(get_and_check(tokens,KW_COMMA));
- if(get_and_check(tokens,KW_CLOSE_NORMAL))
- {
- return ret;
- }else
- {
- return (struct AST_Function_Expression*)get_error_tree((struct AST*)ret);
- }
-
- }
-
- /*
- postfix_expression:
- postfix_expression ++
- postfix_expression --
- postfix_expression [ expression ]
- postfix_expression.id
- postfix_expression->id
- postfix_expression ( arglist )
-
-
- primary_expression
- postfix_expression:
- primary_expression ( ++ | -- | \[ expression \] | .id | ->id | \( arglist \) )*
-
- */
- struct AST* parse_postfix_expression(struct Queue *tokens,struct Scope *scope)
- {
-
- struct AST *hold;
- struct AST *hold_expr;
-
-
- hold=parse_primary_expression(tokens,scope);
-
- while(tokens->size!=0)
- {
- switch(((struct token*)tokens->first->data)->type)
- {
- case KW_PLUSPLUS:
- chomp(tokens);
- hold=(struct AST*)get_unary_expression_tree(hold,OP_POSTFIX_INC);
- break;
- case KW_MINUSMINUS:
- chomp(tokens);
- hold=(struct AST*)get_unary_expression_tree(hold,OP_POSTFIX_DEC);
- break;
- case KW_DOT:
- chomp(tokens);
- if(check(tokens,KW_ID,0))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,(struct AST*)get_lvalue_expression_tree(Queue_Pop(tokens),scope),OP_MEMBER);
- }
- break;
- case KW_ARROW:
- chomp(tokens);
- if(check(tokens,KW_ID,0))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,(struct AST*)get_lvalue_expression_tree(Queue_Pop(tokens),scope),OP_MEMBER_TROUGH_PTR);
- }
- break;
- case KW_OPEN_SQUARE:
-
- chomp(tokens);
- if(get_and_check(tokens,KW_CLOSE_SQUARE))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,NULL,OP_ARR_SUBSCRIPT);
- }else
- {
- hold_expr=parse_expression(tokens,scope);
- hold=(struct AST*)get_binary_expression_tree(hold,hold_expr,OP_ARR_SUBSCRIPT);
- if(!get_and_check(tokens,KW_CLOSE_SQUARE))
- {
- return (struct AST*)get_error_tree(hold);
- }
- }
- break;
- case KW_OPEN_NORMAL:
- chomp(tokens);
- return (struct AST*)parse_arglist(tokens,scope,hold);
- break;
-
- default:
- return hold;
- }
- }
-
- return hold;
- }
-
- /*
- cast-expression:
- unary-expression
- (type)cast-expression
- */
- struct AST* parse_cast_expression(struct Queue *tokens,struct Scope *scope)
- {
- struct AST_Unary_Expression *ret;
- if(get_and_check(tokens,KW_OPEN_NORMAL))
- {
- if(is_type(tokens,scope))
- {
- ret=get_unary_expression_tree(NULL,OP_CAST);
- ret->value_type=parse_type_name(tokens,scope);
- if(get_and_check(tokens,KW_CLOSE_NORMAL))
- {
- ret->operand=parse_cast_expression(tokens,scope);
- return (struct AST*)ret;
- }else
- {
- return (struct AST*)get_error_tree((struct AST*)ret);
-
- }
-
- }else
- {
- return (struct AST*)parse_unary_expression(tokens,scope);
- }
- }else
- {
-
- return parse_unary_expression(tokens,scope);
- }
- }
- /*
- unary-expression:
- ++unary-expression
- --unary-expression
- +unary-expression
- -unary-expression
- !cast-expression
- ~cast-expression
- *cast-expression
- &cast-expression
- sizeof ( typename )
- sizeof unary-expression
- postfix-expression
-
- */
-
- struct AST* parse_unary_expression(struct Queue *tokens,struct Scope *scope)
- {
- struct AST_Unary_Expression *hold;
-
- if(tokens->size==0)
- {
- /*TODO error*/
- return (struct AST*)get_error_tree(NULL);
- }
-
- /*TODO make it iterative*/
- switch(((struct token*)tokens->first->data)->type)
- {
- case KW_PLUSPLUS:
- chomp(tokens);
- return (struct AST*)get_unary_expression_tree(parse_unary_expression(tokens,scope),OP_PREFIX_INC);
- case KW_MINUSMINUS:
- chomp(tokens);
- return (struct AST*)get_unary_expression_tree(parse_unary_expression(tokens,scope),OP_PREFIX_DEC);
- case KW_PLUS:
- chomp(tokens);
- return (struct AST*)get_unary_expression_tree(parse_cast_expression(tokens,scope),OP_UNARY_PLUS);
- case KW_MINUS:
- chomp(tokens);
- return (struct AST*)get_unary_expression_tree(parse_cast_expression(tokens,scope),OP_UNARY_MINUS);
- case KW_EXCLAMATION:
- chomp(tokens);
- return (struct AST*)get_unary_expression_tree(parse_cast_expression(tokens,scope),OP_LOGICAL_NOT);
- case KW_TILDE:
- chomp(tokens);
- return (struct AST*)get_unary_expression_tree(parse_cast_expression(tokens,scope),OP_BITWISE_NOT);
- case KW_STAR:
- chomp(tokens);
- return (struct AST*)get_unary_expression_tree(parse_cast_expression(tokens,scope),OP_DEREFERENCE);
- case KW_AND:
- chomp(tokens);
- return (struct AST*)get_unary_expression_tree(parse_cast_expression(tokens,scope),OP_ADDR_OF);
- case KW_SIZEOF:
- chomp(tokens);
- if(get_and_check(tokens,KW_OPEN_NORMAL))
- {
- hold=get_unary_expression_tree(NULL,OP_CAST);
- hold->value_type=parse_type_name(tokens,scope);
- hold->operand=parse_unary_expression(tokens,scope);
- return (struct AST*)hold;
- }else
- {
- return (struct AST*)get_unary_expression_tree(parse_unary_expression(tokens,scope),OP_SIZEOF);
- }
- default:
- return parse_postfix_expression(tokens,scope);
- }
-
- }
- /*
- multiplicative-expression:
- cast-expression ( ( * | / | % ) cast-expression )*
- */
- struct AST* parse_multiplicative_expression(struct Queue *tokens,struct Scope *scope)
- {
- struct AST *hold;
- hold=parse_cast_expression(tokens,scope);
- while(tokens->size!=0)
- {
- switch(((struct token*)tokens->first->data)->type)
- {
- case KW_STAR:
- chomp(tokens);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_cast_expression(tokens,scope),OP_MUL);
- break;
- case KW_FORWARD_SLASH:
- chomp(tokens);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_cast_expression(tokens,scope),OP_DIV);
- break;
- case KW_PERCENT:
- chomp(tokens);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_cast_expression(tokens,scope),OP_REMAINDER);
- break;
- default:
- return hold;
- }
- }
-
- return hold;
- }
- /*
- additive-expression:
- multiplicative-expression ( ( + | - ) multiplicative )*
- */
- struct AST* parse_additive_expression(struct Queue *tokens,struct Scope *scope)
- {
-
- struct AST *hold;
- hold=parse_multiplicative_expression(tokens,scope);
-
- while(tokens->size!=0)
- {
- switch(((struct token*)tokens->first->data)->type)
- {
- case KW_PLUS:
- chomp(tokens);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_multiplicative_expression(tokens,scope),OP_ADDITION);
- break;
- case KW_MINUS:
- chomp(tokens);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_multiplicative_expression(tokens,scope),OP_SUBTRACTION);
- break;
- default:
- return hold;
- }
- }
-
- return hold;
- }
- /*
- bitwise-shift:
- additive-expression ( ( << | >> ) additive-expression)*
- */
- struct AST* parse_shift_expression(struct Queue *tokens,struct Scope *scope)
- {
-
- struct AST *hold;
- hold=parse_additive_expression(tokens,scope);
-
- while(tokens->size!=0)
- {
- switch(((struct token*)tokens->first->data)->type)
- {
- case KW_SHIFT_LEFT:
- chomp(tokens);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_additive_expression(tokens,scope),OP_SHIFT_LEFT);
- break;
- case KW_SHIFT_RIGHT:
- chomp(tokens);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_additive_expression(tokens,scope),OP_SHIFT_RIGHT);
- break;
- default:
- return hold;
- }
- }
- return hold;
- }
-
- /*
- relational-expression:
- shift-expression ( ( < | > | <= | >= ) shift-expression )*
- */
-
- struct AST* parse_relational_expression(struct Queue *tokens,struct Scope *scope)
- {
- struct AST *hold;
- hold=parse_shift_expression(tokens,scope);
-
- while(tokens->size!=0)
- {
- switch(((struct token*)tokens->first->data)->type)
- {
- case KW_LESS:
- chomp(tokens);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(tokens,scope),OP_LESS);
- break;
- case KW_LESS_EQ:
- chomp(tokens);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(tokens,scope),OP_LESS_EQ);
- break;
- case KW_MORE:
- chomp(tokens);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(tokens,scope),OP_GREATER);
- break;
- case KW_MORE_EQ:
- chomp(tokens);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_shift_expression(tokens,scope),OP_GREATER_EQ);
- break;
- default:
- return hold;
- }
- }
- return hold;
- }
-
-
- /*
- equality-expression:
- realtional-expression ( ( == | != ) relational-expression )*
- */
- struct AST* parse_equality_expression(struct Queue *tokens,struct Scope *scope)
- {
- struct AST *hold;
- hold=parse_relational_expression(tokens,scope);
-
- while(tokens->size!=0)
- {
- switch(((struct token*)tokens->first->data)->type)
- {
- case KW_EQEQ:
- chomp(tokens);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_relational_expression(tokens,scope),OP_EQUAL);
- break;
- case KW_NOT_EQ:
- chomp(tokens);
- hold=(struct AST*)get_binary_expression_tree(hold,parse_relational_expression(tokens,scope),OP_NOT_EQUAL);
- break;
- default:
- return hold;
- }
- }
- return hold;
- }
- /*
- and-expression:
- equality-expression ( & equality-expression ) *
- */
- struct AST* parse_and_expression(struct Queue *tokens,struct Scope *scope)
- {
-
- struct AST *hold;
- hold=parse_equality_expression(tokens,scope);
- while(get_and_check(tokens,KW_AND))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,parse_equality_expression(tokens,scope),OP_BITWISE_AND);
- }
- return hold;
- }
- /*
- exclusive-or-expression:
- and-expression (^ and-expression)*
-
- */
- struct AST* parse_exclusive_or_expression(struct Queue *tokens,struct Scope *scope)
- {
- struct AST *hold;
- hold=parse_and_expression(tokens,scope);
- while(get_and_check(tokens,KW_HAT))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,parse_and_expression(tokens,scope),OP_BITWISE_XOR);
- }
- return hold;
-
- }
- /*
- inclusive-or-expression:
- exclusive-or-expression (|exclusive-or-expression)*
- */
- struct AST* parse_inclusive_or_expression(struct Queue *tokens,struct Scope *scope)
- {
-
- struct AST *hold;
- hold=parse_exclusive_or_expression(tokens,scope);
- while(get_and_check(tokens,KW_PIPE))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,parse_exclusive_or_expression(tokens,scope),OP_BITWISE_OR);
- }
- return hold;
- }
- /*
- logical-and-expression:
- inclusive-or-expression(&&inclusive-or-expression)*
- */
- struct AST* parse_logical_and_expression(struct Queue *tokens,struct Scope *scope)
- {
-
- struct AST *hold;
- hold=parse_inclusive_or_expression(tokens,scope);
- while(get_and_check(tokens,KW_AND_AND))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,parse_inclusive_or_expression(tokens,scope),OP_LOGICAL_AND);
- }
- return hold;
- }
- /*
- logical-or-expression:
- logical-and-expression ( || logical-and-expression )*
- */
- struct AST* parse_logical_or_expression(struct Queue *tokens,struct Scope *scope)
- {
-
- struct AST *hold;
- hold=parse_logical_and_expression(tokens,scope);
- while(get_and_check(tokens,KW_AND_AND))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,parse_logical_and_expression(tokens,scope),OP_LOGICAL_OR);
- }
- return hold;
- }
-
- /*
- conditional-expression:
- logical-or-expression
- logical-or-expression?expression:conditional-expression
- */
- struct AST* parse_conditional_expression(struct Queue *tokens,struct Scope *scope)
- {
-
- struct AST *hold;
- hold=parse_logical_or_expression(tokens,scope);
- if(get_and_check(tokens,KW_QUESTION))
- {
- hold=(struct AST*)get_conditional_expression_tree(hold,parse_expression(tokens,scope),NULL);
- if(get_and_check(tokens,KW_COLUMN))
- {
- ((struct AST_Conditional_Expression*)hold)->right=parse_conditional_expression(tokens,scope);
- return hold;
- }else
- {
- return (struct AST*)get_error_tree(hold);
- }
- }else
- {
- return hold;
- }
- }
- /*
- assignment-expression:
- conditional-expression
- unary-expression ( ( = | += | -= | %= | /= | *= | >>= | <<= | &= | |= | ^= ) assignment-expression
- */
- struct AST* parse_assignment_expression(struct Queue *tokens,struct Scope *scope)
- {
- struct AST *hold;
-
- if(tokens->size==0)
- {
- /*TODO error*/
- return (struct AST*)get_error_tree(NULL);
- }
-
- hold=parse_conditional_expression(tokens,scope);
- if(tokens->size==0)
- return hold;
- /*TODO make it iterative*/
- switch(((struct token*)tokens->first->data)->type)
- {
- case KW_EQ:
- chomp(tokens);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_ASSIGN);
- case KW_PLUS_EQ:
- chomp(tokens);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_ADD_ASSIGN);
- case KW_MINUS_EQ:
- chomp(tokens);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_SUBTRACT_ASSIGN);
- case KW_PERCENT_EQ:
- chomp(tokens);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_REMAINDER_ASSIGN);
- case KW_DIV_EQ:
- chomp(tokens);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_DIV_ASSIGN);
- case KW_STAR_EQ:
- chomp(tokens);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_MULTIPLY_ASSIGN);
- case KW_SHIFT_RIGHT_EQ:
- chomp(tokens);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_SHIFT_RIGHT_ASSIGN);
- case KW_SHIFT_LEFT_EQ:
- chomp(tokens);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_SHIFT_LEFT_ASSIGN);
- case KW_AND_EQ:
- chomp(tokens);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_AND_ASSIGN);
- case KW_PIPE_EQ:
- chomp(tokens);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_PIPE_ASSIGN);
- case KW_HAT_EQ:
- chomp(tokens);
- return (struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_XOR_ASSIGN);
- default:
- return hold;
- }
-
- }
- /*
- comma-expression:
- assignment-expression(,assignment-expression)*
- */
- struct AST* parse_comma_expression(struct Queue *tokens,struct Scope *scope)
- {
- struct AST *hold;
- hold=parse_assignment_expression(tokens,scope);
- while(get_and_check(tokens,KW_COMMA))
- {
- hold=(struct AST*)get_binary_expression_tree(hold,parse_assignment_expression(tokens,scope),OP_COMMA);
- }
- return hold;
- }
-
- #endif
F diff --git a/parse_expression.h b/parse_expression.h
deleted file mode 100644
--- a/parse_expression.h
+++ /dev/null
- #ifndef GCC_PARSE_EXPR_H
- #define GCC_PARSE_EXPR_H GCC_PARSE_EXPR_H
- #include"chonky.h"
- #include"queue.h"
- #include"lexer.h"
- #include"parse_declaration.h"
- #include"ast.h"
- #include<limits.h>
-
-
- struct AST* parse_expression(struct Queue *tokens,struct Scope *scope);
- struct AST* parse_const_expression(struct Queue *tokens,struct Scope *scope);
- struct AST* parse_primary_expression(struct Queue *tokens,struct Scope *scope);
-
-
- struct AST_Function_Expression* parse_arglist(struct Queue *tokens,struct Scope *scope,struct AST* id);
- struct AST* parse_postfix_expression(struct Queue *tokens,struct Scope *scope);
-
- struct AST* parse_cast_expression(struct Queue *tokens,struct Scope *scope);
- struct AST* parse_unary_expression(struct Queue *tokens,struct Scope *scope);
-
- struct AST* parse_multiplicative_expression(struct Queue *tokens,struct Scope *scope);
-
- struct AST* parse_additive_expression(struct Queue *tokens,struct Scope *scope);
-
- struct AST* parse_shift_expression(struct Queue *tokens,struct Scope *scope);
-
-
- struct AST* parse_relational_expression(struct Queue *tokens,struct Scope *scope);
- struct AST* parse_equality_expression(struct Queue *tokens,struct Scope *scope);
- struct AST* parse_and_expression(struct Queue *tokens,struct Scope *scope);
- struct AST* parse_exclusive_or_expression(struct Queue *tokens,struct Scope *scope);
- struct AST* parse_inclusive_or_expression(struct Queue *tokens,struct Scope *scope);
- struct AST* parse_logical_and_expression(struct Queue *tokens,struct Scope *scope);
- struct AST* parse_logical_or_expression(struct Queue *tokens,struct Scope *scope);
- struct AST* parse_conditional_expression(struct Queue *tokens,struct Scope *scope);
- struct AST* parse_assignment_expression(struct Queue *tokens,struct Scope *scope);
- struct AST* parse_comma_expression(struct Queue *tokens,struct Scope *scope);
-
-
-
-
-
- /*
-
- expression:
- e15
- comma-expression:
- assignment-expression(,assignment-expression)*
-
- assignment-expression:
- unary-expression ( ( = | += | -= | %= | /= | *= | >>= | <<= | &= | |= | ^= ) assignment-expression
-
- conditional-expression:
- logical-or-expression
- logical-or-expression?expression:conditional-expression
- logical-or-expression:
- logical-and-expression ( || logical-and-expression )*
- logical-and-expression:
- inclusive-or-expression(&&inclusive-or-expression)*
- inclusive-or-expression:
- exclusive-or-expression (|exclusive-or-expression)*
- exclusive-or-expression:
- and-expression (^ and-expression)*
- and-expression:
- equality-expression ( & equality-expression ) *
- equality-expression:
- realtional-expression ( ( == | != ) relational-expression )*
- relational-expression:
- shift-expression ( ( < | > | <= | >= ) shift-expression )*
-
- shift-expression:
- additive-expression ( ( << | >> ) additive-expression)*
-
- additive-expression:
- multiplicative-expression ( ( + | - ) multiplicative-expression )*
-
- multiplicative-expression:
- cast-expression ( ( * | / | % ) cast-expression )*
-
- unary-expression:
- ++unary-expression
- --unary-expression
- +unary-expression
- -unary-expression
- !cast-expression
- ~cast-expression
- *cast-expression
- &cast-expression
- sizeof ( typename )
- sizeof unary-expression
- postfix-expression
-
- cast-expression:
- unary-expression
- (type)cast-expression
-
-
- arglist:
- epsilon
- assignment-expression-list(,assignment-expression-list)*
- postfix_expression:
- postfix_expression ++
- postfix_expression --
- postfix_expression [ expression ]
- postfix_expression.id
- postfix_expression->id
- postfix_expression ( arglist )
-
-
- primary_expression
-
- primary-expression:
- number
- string
- id
- (e)
-
- */
-
-
- #endif
F diff --git a/parse_statement.c b/parse_statement.c
deleted file mode 100644
--- a/parse_statement.c
+++ /dev/null
- #ifndef PARSE_GCC_STATEMENT_C
- #define PARSE_GCC_STATEMENT_C PARSE_GCC_STATEMENT_C
- #include "parse_statement.h"
- #include "parse_declaration.h"
-
-
- struct AST* parse_statement(struct Queue* tokens,struct Scope *scope)
- {
-
- if(tokens->size==0)
- return NULL;
-
-
-
- switch(kw_get(tokens))
- {
- case KW_NOTYPE:
- return (struct AST*)get_error_tree(NULL);
-
- case KW_OPEN_CURLY:
- chomp(tokens);
- return parse_finish_compound_statement(tokens,scope);
- case KW_IF:
- chomp(tokens);
- return parse_finish_if_statement(tokens,scope);
- case KW_SWITCH:
- chomp(tokens);
- return parse_finish_switch_statement(tokens,scope);
- case KW_WHILE:
- chomp(tokens);
- return parse_finish_while_statement(tokens,scope);
- case KW_DO:
- chomp(tokens);
- return parse_finish_do_while_statement(tokens,scope);
- case KW_FOR:
- chomp(tokens);
- return parse_finish_for_statement(tokens,scope);
- case KW_GOTO:
- chomp(tokens);
- return parse_finish_goto_statement(tokens,scope);
- case KW_CASE:
- chomp(tokens);
- return parse_finish_labeled_statement(tokens,scope,ST_CASE);
- case KW_DEFAULT:
- chomp(tokens);
- return parse_finish_default_statement(tokens,scope);
- case KW_ID:
- /*TODO check if id is in function scope*/
- if(0)
- {
- return parse_finish_labeled_statement(tokens,scope,ST_LABEL);
- }else
- {
- return parse_expression_statement(tokens,scope);
- }
- case KW_CONTINUE:
- chomp(tokens);
- return parse_finish_continue_statement(tokens);
- case KW_BREAK:
- chomp(tokens);
- return parse_finish_break_statement(tokens);
- case KW_RETURN:
- chomp(tokens);
- return parse_finish_return_statement(tokens,scope);
- default:
- return parse_expression_statement(tokens,scope);
-
- }
-
- }
- /*
- ( declaration | statement )* }
- */
- struct AST* parse_finish_compound_statement(struct Queue* tokens,struct Scope *scope)
- {
- struct AST_Compound_Statement *hold;
- hold=get_compound_statement_tree(scope);
- while(!get_and_check(tokens,KW_CLOSE_CURLY))
- {
- if(is_type(tokens,hold->scope))
- {
- parse_declaration(tokens,hold->scope,&hold->components,0);
- }else
- {
- Queue_Push(&hold->components,parse_statement(tokens,hold->scope));
- }
- }
-
- return (struct AST*)hold;
- }
- /*
- ( expression ) statement
- ( expression ) statement else statement
- */
- struct AST* parse_finish_if_statement(struct Queue* tokens,struct Scope *scope)
- {
- struct AST_If_Statement *hold;
- hold=get_if_statement_tree();
- if(get_and_check(tokens,KW_OPEN_NORMAL))
- {
- hold->condition=parse_expression(tokens,scope);
- if(get_and_check(tokens,KW_CLOSE_NORMAL))
- {
- hold->body_statement=parse_statement(tokens,scope);
- }else
- {
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
- if(get_and_check(tokens,KW_ELSE))
- {
- hold->else_statement=parse_statement(tokens,scope);
- return (struct AST*)hold;
- }else
- {
- hold->else_statement=NULL;
- return (struct AST*)hold;
- }
- }else
- {
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
- return (struct AST*)hold;
- }
- /*
- ( expression ) statement
- */
- struct AST* parse_finish_switch_statement(struct Queue* tokens,struct Scope *scope)
- {
- struct AST_Switch_Statement *hold;
- hold=get_switch_statement_tree();
- if(get_and_check(tokens,KW_OPEN_NORMAL))
- {
- hold->condition=parse_expression(tokens,scope);
- if(get_and_check(tokens,KW_CLOSE_NORMAL))
- {
- hold->body_statement=parse_statement(tokens,scope);
- }else
- {
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
- }else
- {
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
-
- return (struct AST*)hold;
- }
- /*
- ( expression ) statement
-
- */
- struct AST* parse_finish_while_statement(struct Queue* tokens,struct Scope *scope)
- {
- struct AST_While_Statement *hold;
- hold=get_while_statement_tree();
- if(get_and_check(tokens,KW_OPEN_NORMAL))
- {
- hold->condition=parse_expression(tokens,scope);
- if(get_and_check(tokens,KW_CLOSE_NORMAL))
- {
- hold->body_statement=parse_statement(tokens,scope);
- }else
- {
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
- }else
- {
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
-
- return (struct AST*)hold;
- }
- /*
- statement while ( expression ) ;
- */
- struct AST* parse_finish_do_while_statement(struct Queue* tokens,struct Scope *scope)
- {
- struct AST_Do_While_Statement *hold;
- hold=get_do_while_statement_tree();
- hold->body_statement=parse_statement(tokens,scope);
- if(get_and_check(tokens,KW_WHILE) && get_and_check(tokens,KW_OPEN_NORMAL))
- {
- hold->condition=parse_expression(tokens,scope);
-
- if(get_and_check(tokens,KW_CLOSE_NORMAL) && get_and_check(tokens,KW_SEMI_COLUMN))
- {
- return (struct AST*)hold;
- }else
- {
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
- }else
- {
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
-
- }
- /*
- ( [ expression ] ; [ expression ] ; [ expression ] ) statement
- */
- struct AST* parse_finish_for_statement(struct Queue* tokens,struct Scope *scope)
- {
- struct AST_For_Statement *hold;
- hold=get_for_statement_tree();
- if(!get_and_check(tokens,KW_OPEN_NORMAL))
- return (struct AST*)get_error_tree((struct AST*)hold);
-
- hold->initialisation=parse_expression_statement(tokens,scope);
- hold->condition=parse_expression_statement(tokens,scope);
- if(get_and_check(tokens,KW_CLOSE_NORMAL))
- {
- hold->update=get_nop_tree();
- }else
- {
- hold->update=parse_expression(tokens,scope);
- if(!get_and_check(tokens,KW_CLOSE_NORMAL))
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
- hold->body_statement=parse_statement(tokens,scope);
- return (struct AST*)hold;
- }
- /*
- id ;
- */
- struct AST* parse_finish_goto_statement(struct Queue* tokens,struct Scope *scope)
- {
- struct AST* ret;
-
- if(check(tokens,KW_ID,0))
- {
- ret=(struct AST*)get_goto_statement_tree(Queue_Pop(tokens),scope);
- if(get_and_check(tokens,KW_SEMI_COLUMN))
- {
- return ret;
- }else
- {
- return (struct AST*)get_error_tree(ret);
- }
- }
- else
- {
- return (struct AST*)get_error_tree((struct AST*)get_goto_statement_tree(NULL,NULL));
- }
-
- }
- /*
- ;
- */
- struct AST* parse_finish_continue_statement(struct Queue* tokens)
- {
- struct AST *hold;
- hold=malloc(sizeof(struct AST));
- hold->type=ST_CONTINUE;
- if(get_and_check(tokens,KW_SEMI_COLUMN))
- {
- return hold;
- }else
- {
- return (struct AST*)get_error_tree(hold);
- }
- }
- /*
- ;
- */
- struct AST* parse_finish_break_statement(struct Queue* tokens)
- {
- struct AST *hold;
- hold=malloc(sizeof(struct AST));
- hold->type=ST_BREAK;
- if(get_and_check(tokens,KW_SEMI_COLUMN))
- {
- return hold;
- }else
- {
- return (struct AST*)get_error_tree(hold);
- }
- }
- /*
- id:
- statement
- */
- struct AST* parse_finish_labeled_statement(struct Queue* tokens,struct Scope *scope,enum AST_Type type)
- {
- struct AST_Labeled_Statement *ret;
- if(check(tokens,KW_ID,0))
- {
- ret=get_labeled_statement_tree(Queue_Pop(tokens),NULL,scope,type);
- if(get_and_check(tokens,KW_COLUMN))
- {
- ret->statement=parse_statement(tokens,scope);
- return (struct AST*)ret;
- }else
- {
- return (struct AST*)get_error_tree((struct AST*)ret);
- }
- }else
- {
- return (struct AST*)get_error_tree(NULL);
- }
- }
- /*
- :
- statement
- */
- struct AST* parse_finish_default_statement(struct Queue* tokens,struct Scope *scope)
- {
- struct AST_Labeled_Statement *ret;
- ret=get_labeled_statement_tree(NULL,NULL,scope,ST_DEFAULT);
- if(get_and_check(tokens,KW_COLUMN))
- {
- ret->statement=parse_statement(tokens,scope);
- return (struct AST*)ret;
- }else
- {
- return (struct AST*)get_error_tree((struct AST*)ret);
- }
- }
- /*
- [ expression ] ;
-
- */
- struct AST* parse_finish_return_statement(struct Queue* tokens,struct Scope *scope)
- {
- struct AST_Return_Statement *hold;
- if(get_and_check(tokens,KW_SEMI_COLUMN))
- {
- hold=get_return_statement_tree(get_nop_tree());
- return (struct AST*)hold;
- }
-
-
- hold=get_return_statement_tree(parse_expression(tokens,scope));
- if(get_and_check(tokens,KW_SEMI_COLUMN))
- {
- return (struct AST*)hold;
- }else
- {
- return (struct AST*)get_error_tree((struct AST*)hold);
- }
- }
- /*
-
- [ expression ] ;
-
- */
- struct AST* parse_expression_statement(struct Queue* tokens,struct Scope *scope)
- {
- struct AST *hold;
- if(get_and_check(tokens,KW_SEMI_COLUMN))
- {
- hold=get_nop_tree();
- return (struct AST*)hold;
- }
- hold=parse_expression(tokens,scope);
- if(get_and_check(tokens,KW_SEMI_COLUMN))
- {
- return hold;
- }else
- {
- return (struct AST*)get_error_tree(hold);
- }
- }
- #endif
F diff --git a/parse_statement.h b/parse_statement.h
deleted file mode 100644
--- a/parse_statement.h
+++ /dev/null
- #ifndef PARSE_GCC_STATEMENT_H
- #define PARSE_GCC_STATEMENT_H PARSE_GCC_STATEMENT_H
- #include "all.h"
-
- struct Queue;
- struct Scope;
- enum AST_Type;
-
- struct AST* parse_finish_compound_statement(struct Queue* tokens,struct Scope *scope);
- struct AST* parse_op_e_cl_st(struct Queue* tokens,struct Scope *scope);
- struct AST* parse_finish_if_statement(struct Queue* tokens,struct Scope *scope);
- struct AST* parse_finish_switch_statement(struct Queue* tokens,struct Scope *scope);
- struct AST* parse_finish_do_while_statement(struct Queue* tokens,struct Scope *scope);
- struct AST* parse_finish_while_statement(struct Queue* tokens,struct Scope *scope);
- struct AST* parse_finish_for_statement(struct Queue* tokens,struct Scope *scope);
- struct AST* parse_finish_goto_statement(struct Queue* tokens,struct Scope *scope);
- struct AST* parse_finish_continue_statement(struct Queue* tokens);
- struct AST* parse_finish_break_statement(struct Queue* tokens);
- struct AST* parse_finish_return_statement(struct Queue* tokens,struct Scope *scope);
- struct AST* parse_expression_statement(struct Queue* tokens,struct Scope *scope);
- struct AST* parse_finish_labeled_statement(struct Queue* tokens,struct Scope *scope,enum AST_Type type);
- struct AST* parse_finish_default_statement(struct Queue* tokens,struct Scope *scope);
-
-
-
- #endif
F diff --git a/parse_translation_unit.c b/parse_translation_unit.c
deleted file mode 100644
--- a/parse_translation_unit.c
+++ /dev/null
- #ifndef GCC_PARSE_TRANSLATION_C
- #define GCC_PARSE_TRANSLATION_C GCC_PARSE_TRANSLATION_C
- #include "parse_declaration.h"
- #include "parse_statement.h"
- /*
- translation-unit:
- declaration [ translation-unit ]
- function-definition [ translation-unit ]
- */
- struct AST* parse_translation_unit(struct Queue *tokens,struct Scope *scope)
- {
- struct AST_Translation_Unit *hold;
- hold=get_translation_unit_tree(scope);
- while(tokens->size>0)
- {
- parse_declaration(tokens,hold->scope,&hold->components,1);
- }
- return (struct AST*)hold;
-
- }
-
- #endif
F diff --git a/parse_translation_unit.h b/parse_translation_unit.h
deleted file mode 100644
--- a/parse_translation_unit.h
+++ /dev/null
- #ifndef GCC_PARSE_TRANSLATION_H
- #define GCC_PARSE_TRANSLATION_H GCC_PARSE_TRANSLATION_H
-
- struct AST* parse_translation_unit_step(struct Queue *tokens,struct Scope *scope);
- struct AST* parse_translation_unit(struct Queue *tokens,struct Scope *scope);
-
- #endif
F diff --git a/preprocessing.c b/preprocessing.c
deleted file mode 100644
--- a/preprocessing.c
+++ /dev/null
- #ifndef GCC_PREPROCESSING_C
- #define GCC_PREPROCESSING_C GCC_PREPROCESSING_C
- #include "preprocessing.h"
-
-
- #endif
F diff --git a/preprocessing.h b/preprocessing.h
deleted file mode 100644
--- a/preprocessing.h
+++ /dev/null
- #ifndef GCC_PREPROCESSING_C
- #define GCC_PREPROCESSING_C GCC_PREPROCESSING_C
-
-
-
- #endif
F diff --git a/print.c b/print.c
deleted file mode 100644
--- a/print.c
+++ /dev/null
- #ifndef GCC_PRINT
- #define GCC_PRINT GCC_PRINT
- #include "print.h"
-
-
-
-
-
- void print_token(FILE *out,struct token *token)
- {
- size_t i;
- // fprintf(out,"[");
- for(i=0;i<token->data_size;++i)
- {
- fprintf(out,"%c",token->data[i]);
- }
- // fprintf(out,"]");
- }
-
- void print_tokens(FILE *out,struct Queue *tokens)
- {
- struct Queue_Node *it;
- for( it=tokens->first;
- it!=tokens->last;
- it=it->prev)
- {
- fprintf(out,"[");
- print_keyword_enum(out,((struct token*)(it->data))->type);
- print_token(out,(struct token*)(it->data));
- fprintf(out,"] ");
- }
- if(it!=NULL)
- {
- print_token(out,(struct token*)(it->data));
- }
- }
-
- void print_ast_enum(FILE *out,enum AST_Type op)
- {
- switch(op)
- {
- case OP_COMMA:
- fprintf(out,",");break;
- case OP_ADDITION:
- fprintf(out,"+");break;
- case OP_SUBTRACTION:
- fprintf(out,"-");break;
- case OP_MUL:
- fprintf(out,"*");break;
- case OP_DIV:
- fprintf(out,"/");break;
- case OP_REMAINDER:
- fprintf(out,"%");break;
- case OP_COND:
- fprintf(out,"CONDITIONAL");break;
- case OP_FUNCTION:
- fprintf(out,"FUNCTION_CALL");break;
- case OP_ASSIGN:
- fprintf(out,"=");break;
- case OP_ADD_ASSIGN:
- fprintf(out,"&=");break;
- case OP_SUBTRACT_ASSIGN:
- fprintf(out,"-=");break;
- case OP_MULTIPLY_ASSIGN:
- fprintf(out,"*=");break;
- case OP_REMAINDER_ASSIGN:
- fprintf(out,"%=");break;
- case OP_DIV_ASSIGN:
- fprintf(out,"/=");break;
- case OP_SHIFT_LEFT_ASSIGN:
- fprintf(out,">>=");break;
- case OP_SHIFT_RIGHT_ASSIGN:
- fprintf(out,"<<=");break;
- case OP_AND_ASSIGN:
- fprintf(out,"&=");break;
- case OP_XOR_ASSIGN:
- fprintf(out,"^=");break;
- case OP_PIPE_ASSIGN:
- fprintf(out,"|=");break;
- case OP_NOP:
- fprintf(out,"NOP");break;
- case OP_LOGICAL_OR:
- fprintf(out,"||");break;
- case OP_LOGICAL_AND:
- fprintf(out,"&&");break;
- case OP_LOGICAL_NOT:
- fprintf(out,"!");break;
- case OP_BITWISE_OR:
- fprintf(out,"|");break;
- case OP_BITWISE_AND:
- fprintf(out,"&");break;
- case OP_BITWISE_XOR:
- fprintf(out,"^");break;
- case OP_BITWISE_NOT:
- fprintf(out,"~");break;
- case OP_ADDR_OF:
- fprintf(out,"&");break;
- case OP_DEREFERENCE:
- fprintf(out,"*");break;
- case OP_MEMBER_TROUGH_PTR:
- fprintf(out,"->");break;
- case OP_MEMBER:
- fprintf(out,".");break;
- case OP_ARR_SUBSCRIPT:
- fprintf(out,"ARR_SUBSCRIPT");break;
- case OP_POSTFIX_INC:
- fprintf(out,"++");break;
- case OP_POSTFIX_DEC:
- fprintf(out,"--");break;
- case OP_PREFIX_INC:
- fprintf(out,"++");break;
- case OP_PREFIX_DEC:
- fprintf(out,"--");break;
- case OP_UNARY_PLUS:
- fprintf(out,"+");break;
- case OP_UNARY_MINUS:
- fprintf(out,"-");break;
- case OP_CAST:
- fprintf(out,"CAST");break;
- case OP_SIZEOF:
- fprintf(out,"sizeof");break;
- case OP_SHIFT_LEFT:
- fprintf(out,"<<");break;
- case OP_SHIFT_RIGHT:
- fprintf(out,">>");break;
- case OP_LESS_EQ:
- fprintf(out,"<=");break;
- case OP_GREATER_EQ:
- fprintf(out,">=");break;
- case OP_LESS:
- fprintf(out,"<");break;
- case OP_GREATER:
- fprintf(out,">");break;
- case OP_EQUAL:
- fprintf(out,"==");break;
- case OP_NOT_EQUAL:
- fprintf(out,"!=");break;
- case OP_LVALUE:
- fprintf(out,"LVALUE");break;
- case OP_RVALUE:
- fprintf(out,"RVALUE");break;
- case ST_COMPOUND:
- fprintf(out,"COMPOUND");break;
- case ST_EXPRESSION:
- fprintf(out,"EXPRESSION");break;
- case ST_SWITCH:
- fprintf(out,"switch");break;
- case ST_IF:
- fprintf(out,"if");break;
- case ST_WHILE:
- fprintf(out,"while");break;
- case ST_DO_WHILE:
- fprintf(out,"do_while");break;
- case ST_GOTO:
- fprintf(out,"goto");break;
- case ST_LABEL:
- fprintf(out,"LABEL");break;
- case ST_CASE:
- fprintf(out,"case");break;
- case ST_DEFAULT:
- fprintf(out,"default");break;
- case ST_CONTINUE:
- fprintf(out,"continue");break;
- case ST_BREAK:
- fprintf(out,"break");break;
- case ST_RETURN:
- fprintf(out,"return");break;
- case ST_FOR:
- fprintf(out,"for");break;
-
- /*TODO obj dec obj def func decl*/
- case ST_FUNCTION_DEFINITION:
- fprintf(out,"FUNCTION_DEFINITION");break;
- case TRANSLATION_UNIT:
- fprintf(out,"TRANSLATION_UNIT");break;
- case ERROR:
- fprintf(out,"ERROR");break;
- default:
- fprintf(out,"NOT_POSSIBLE");break;
- }
- }
-
- void print_error_tree(FILE *out,struct AST_Error *error)
- {
- fprintf(out,"ERROR");
- if(error->error!=NULL)
- {
- print_ast(out,error->error);
- }
- }
- void print_binary_expression_tree(FILE *out,struct AST_Binary_Expression *bin)
- {
- if(bin->type==OP_ARR_SUBSCRIPT)
- {
- print_ast(out,bin->left);
- fprintf(out,"[");
- print_ast(out,bin->right);
- fprintf(out,"]");
- }else
- {
- fprintf(out,"(");
- print_ast(out,bin->left);
- print_ast_enum(out,bin->type);
- print_ast(out,bin->right);
- fprintf(out,")");
- }
- }
- void print_conditional_expression_tree(FILE *out,struct AST_Conditional_Expression *cond)
- {
- fprintf(out,"(");
- print_ast(out,cond->left);
- fprintf(out,"?");
- print_ast(out,cond->center);
- fprintf(out,":");
- print_ast(out,cond->right);
- fprintf(out,")");
- }
- void print_function_expression_tree(FILE *out,struct AST_Function_Expression *function_call)
- {
- struct Queue_Node *it;
- print_ast(out,function_call->id);
- fprintf(out,"(");
- if(function_call->arguments.size>0)
- {
- fprintf(out,"\n");
- for(it=function_call->arguments.first;it!=function_call->arguments.last;it=it->prev)
- {
- print_ast(out,(struct AST*)(it->data));
- fprintf(out,",\n");
- }
- if(it!=NULL)
- {
- print_ast(out,(struct AST*)(it->data));
- }
-
- }
- fprintf(out,")");
- }
- void print_unary_expression_tree(FILE *out,struct AST_Unary_Expression *unary_expression)
- {
- print_ast_enum(out,unary_expression->type);
- if(unary_expression->type==OP_CAST)
- {
- fprintf(out,"(");
- print_type(out,unary_expression->value_type,1);
- fprintf(out,")");
- }
- print_ast(out,unary_expression->operand);
- }
- void print_rvalue_expression_tree(FILE *out,struct AST_Rvalue_Expression *rval)
- {
- print_token(out,rval->id);
- }
- void print_lvalue_expression_tree(FILE *out,struct AST_Lvalue_Expression *lval)
- {
- print_token(out,lval->id);
- }
- void print_labeled_statement_tree(FILE *out,struct AST_Labeled_Statement *lab)
- {
- if(lab->type!=ST_LABEL)
- print_ast_enum(out,lab->type);
- if(lab->label!=NULL)
- print_token(out,lab->label);
- fprintf(out,":\n");
- print_ast(out,lab->statement);
- }
- void print_compound_statement_tree(FILE *out,struct AST_Compound_Statement *comp)
- {
- struct Queue_Node *it;
- fprintf(out,"{\n");
- for(it=comp->components.first;it!=NULL;it=it->prev)
- {
- print_ast(out,(struct AST*)(it->data));
- fprintf(out,";\n");
- }
- fprintf(out,"}\n");
- }
- void print_if_statement_tree(FILE *out,struct AST_If_Statement *ifs)
- {
- fprintf(out,"if(");
- print_ast(out,ifs->condition);
- fprintf(out,")\n");
- print_ast(out,ifs->body_statement);
-
- if(ifs->else_statement!=NULL)
- {
- fprintf(out,"\nelse");
- print_ast(out,ifs->else_statement);
- }
-
- }
- void print_switch_statement_tree(FILE *out,struct AST_Switch_Statement *swi)
- {
- fprintf(out,"switch(");
- print_ast(out,swi->condition);
- fprintf(out,")\n");
- print_ast(out,swi->body_statement);
- }
- void print_while_statement_tree(FILE *out,struct AST_While_Statement *whi)
- {
- fprintf(out,"while(");
- print_ast(out,whi->condition);
- fprintf(out,")\n");
- print_ast(out,whi->body_statement);
- }
- void print_do_while_statement_tree(FILE *out,struct AST_Do_While_Statement *whi)
- {
- fprintf(out,"do\n");
- print_ast(out,whi->body_statement);
- fprintf(out,"while(");
- print_ast(out,whi->condition);
- fprintf(out,")\n");
- }
- void print_for_statement_tree(FILE *out,struct AST_For_Statement *fo)
- {
- fprintf(out,"for(\n");
- print_ast(out,fo->initialisation);
- fprintf(out,";\n");
- print_ast(out,fo->condition);
- fprintf(out,";\n");
- print_ast(out,fo->update);
- fprintf(out,")\n");
- print_ast(out,fo->body_statement);
- }
- void print_return_statement_tree(FILE *out,struct AST_Return_Statement *return_expression)
- {
- fprintf(out,"return ");
- print_ast(out,return_expression->return_expression);
- }
- void print_goto_statement_tree(FILE *out,struct AST_Goto_Statement *got)
- {
- fprintf(out,"goto ");
- print_token(out,got->label);
- }
-
- void print_type(FILE *out,struct Type *type,char should_print_struct_union)
- {
- switch(type->specifier)
- {
- case TS_VOID:
- fprintf(out,"void");return;
- case TS_CHAR:
- fprintf(out,"char");return;
- case TS_INT:
- fprintf(out,"int");return;
- case TS_FLOAT:
- fprintf(out,"float");return;
- case TS_DOUBLE:
- fprintf(out,"double");return;
- case TS_UNION:
- case TS_STRUCT:
- if(should_print_struct_union)
- {
- print_struct_union(out,((struct Type_Struct_Union*)type)->struct_union);
- }else
- {
- fprintf(out,(type->specifier==TS_STRUCT?"struct":"union"));
- }
- return;
- case TS_ENUM:
- print_enumeration(out,((struct Type_Enum*)type)->enumeration);
- return;
- case TS_POINTER:
- fprintf(out,"pointer to ");
- print_type(out,((struct Type_Pointer*)type)->points_to,0);
- return;
- case TS_ARRAY:
- fprintf(out,"array [%zu] of ",((struct Type_Array*)type)->number_of_elements);
- print_type(out,((struct Type_Array*)type)->is_array_of,should_print_struct_union);
- return;
- case TS_FUNC:
- fprintf(out,"function taking arguments (");
- print_list_of_denoted(out,((struct Type_Function*)type)->parameters);
- fprintf(out,") returning ");
- print_type(out,((struct Type_Function*)type)->return_type,should_print_struct_union);
- return;
- case TS_BITFIELD:
- fprintf(out,"%zu bits of ",((struct Type_Bit_Field*)type)->number_of_bits);
- print_type(out,((struct Type_Bit_Field*)type)->base,should_print_struct_union);
- return;
- case TS_NONE:
- fprintf(out,"NONE");return;
- case TS_ERROR:
- fprintf(out,"ERROR!");return;
-
- }
- assert(1==0);
- }
- void print_denoted(FILE *out,struct Denoted *denoted)
- {
-
- switch(denoted->denotation)
- {
- case DT_Macro:
- fprintf(out,"macro ");return;
- case DT_Macro_Parameter:
- fprintf(out,"macro parameter ");return;
- case DT_Label:
- fprintf(out,"label ");return;
- case DT_Object:
- fprintf(out,"denoted object ");
- print_token(out,((struct Denoted_Object*)denoted)->id);
- fprintf(out," is a ");
- print_type(out,((struct Denoted_Object*)denoted)->object->type,1);
-
- return;
- case DT_Typedef:
- fprintf(out,"typedef ");
- print_token(out,((struct Denoted_Typedef*)denoted)->id);
- fprintf(out," to ");
- print_type(out,((struct Denoted_Typedef*)denoted)->type,0);
- return;
- case DT_Function:
- print_token(out,((struct Denoted_Function*)denoted)->id);
- fprintf(out," is ");
- print_type(out,((struct Denoted_Function*)denoted)->type,1);
- return;
- case DT_Enum:
- print_token(out,((struct Denoted_Enum*)denoted)->id);
- fprintf(out," is ");
- print_enumeration(out,((struct Denoted_Enum*)denoted)->enumeration);
- return;
- case DT_Enum_Constant:
- fprintf(out,"%i ",((struct Denoted_Enum_Const*)denoted)->value);
- return;
- case DT_Struct_Union_Tag:
- print_token(out,((struct Denoted_Struct_Union*)denoted)->id);
- fprintf(out," is ");
- print_struct_union(out,((struct Denoted_Struct_Union*)denoted)->struct_union);
- case DT_Error:
- fprintf(out,"denotation error");return;
- case DT_Prototype:
- fprintf(out,"denotation prototyep");return;
-
- }
- }
- void print_list_of_denoted(FILE *out,struct Queue *denoted)
- {
- struct Queue_Node *it;
- for(it=denoted->first;it!=NULL;it=it->prev)
- {
- print_denoted(out,(struct Denoted*)it->data);
- if(it->prev!=NULL)
- fprintf(out,",");
- }
- }
- void print_enumeration(FILE *out,struct Enum *enumeration)
- {
- fprintf(out,"enum ");
- print_list_of_denoted(out,enumeration->consts);
- }
- void print_struct_union(FILE *out,struct Struct_Union *struct_union)
- {
- switch(struct_union->specifier)
- {
- case TS_UNION:
- fprintf(out,"union ");
- break;
- case TS_STRUCT:
- fprintf(out,"struct ");
- break;
- default:
- assert(1==0);
- }
- fprintf(out,"{");
- print_list_of_denoted(out,struct_union->members);
- fprintf(out,"}");
-
- }
- void print_translation_unit_tree(FILE *out,struct AST_Translation_Unit *unit)
- {
- struct Queue_Node *it;
- struct AST* hold;
- for(it=unit->components.first;it!=NULL;it=it->prev)
- {
- hold=(struct AST*)(it->data);
- print_ast(out,hold);
- if(hold->type!=ST_FUNCTION_DEFINITION)
- {
- fprintf(out,";\n");
- }
- }
- }
- void print_ast(FILE *out,struct AST* tree)
- {
- if(tree==NULL)
- {
- fprintf(out,"NULL");
- return ;
- }
- switch(tree->type)
- {
- case OP_MEMBER_TROUGH_PTR:
- case OP_MEMBER:
- case OP_BITWISE_AND:
- case OP_BITWISE_XOR:
- case OP_BITWISE_NOT:
- case OP_LOGICAL_AND:
- case OP_LOGICAL_OR:
- case OP_XOR_ASSIGN:
- case OP_PIPE_ASSIGN:
- case OP_SHIFT_RIGHT_ASSIGN:
- case OP_ADD_ASSIGN:
- case OP_SUBTRACT_ASSIGN:
- case OP_MULTIPLY_ASSIGN:
- case OP_REMAINDER_ASSIGN:
- case OP_DIV_ASSIGN:
- case OP_SUBTRACTION:
- case OP_MUL:
- case OP_DIV:
- case OP_REMAINDER:
- case OP_EQUAL:
- case OP_LESS:
- case OP_LESS_EQ:
- case OP_SHIFT_LEFT:
- case OP_BITWISE_OR:
- case OP_AND_ASSIGN:
- case OP_ARR_SUBSCRIPT:
- case OP_SHIFT_LEFT_ASSIGN:
- case OP_ASSIGN:
- case OP_ADDITION:
- case OP_COMMA:
- case OP_SHIFT_RIGHT:
- case OP_GREATER_EQ:
- case OP_GREATER:
- case OP_NOT_EQUAL:
- print_binary_expression_tree(out,(struct AST_Binary_Expression*)tree);
- break;
- case OP_COND:
- print_conditional_expression_tree(out,(struct AST_Conditional_Expression*)tree);
- break;
- case OP_FUNCTION:
- print_function_expression_tree(out,(struct AST_Function_Expression*)tree);
- break;
- case OP_LOGICAL_NOT:
- case OP_UNARY_MINUS:
- case OP_SIZEOF:
- case OP_ADDR_OF:
- case OP_DEREFERENCE:
- case OP_POSTFIX_INC:
- case OP_PREFIX_INC:
- case OP_UNARY_PLUS:
- case OP_POSTFIX_DEC:
- case OP_PREFIX_DEC:
- case OP_CAST:
- print_unary_expression_tree(out,(struct AST_Unary_Expression*)tree);
- break;
- case OP_LVALUE:
- print_lvalue_expression_tree(out,(struct AST_Lvalue_Expression*)tree);
- break;
- case OP_RVALUE:
- print_rvalue_expression_tree(out,(struct AST_Rvalue_Expression*)tree);
- break;
- case OP_NOP:
- fprintf(out,"NOP");
- break;
-
- case ST_SWITCH:
- print_switch_statement_tree(out,(struct AST_Switch_Statement*)tree);
- break;
- case ST_IF:
- print_if_statement_tree(out,(struct AST_If_Statement*)tree);
- break;
- case ST_WHILE:
- print_while_statement_tree(out,(struct AST_While_Statement*)tree);
- break;
- case ST_DO_WHILE:
- print_do_while_statement_tree(out,(struct AST_Do_While_Statement*)tree);
- break;
- case ST_GOTO:
- print_goto_statement_tree(out,(struct AST_Goto_Statement*)tree);
- break;
- case ST_DEFAULT:
- case ST_LABEL:
- case ST_CASE:
- print_labeled_statement_tree(out,(struct AST_Labeled_Statement*)tree);
- break;
- case ST_CONTINUE:
- fprintf(out,"continue");
- break;
- case ST_BREAK:
- fprintf(out,"break");
- break;
- case ST_RETURN:
- print_return_statement_tree(out,(struct AST_Return_Statement*)tree);
- break;
- case ST_FOR:
- print_for_statement_tree(out,(struct AST_For_Statement*)tree);
- break;
- case ST_COMPOUND:
- print_compound_statement_tree(out,(struct AST_Compound_Statement*)tree);
- break;
- case ST_OBJECT_DECLARATION:
- print_denoted(out,(struct Denoted*)((struct AST_Object_Declaration*)tree)->object);
- fprintf(out,"=");
- print_ast(out,((struct AST_Object_Declaration*)tree)->initializer);
- break;
- case ST_TYPE_DEFINITION:
- print_denoted(out,(struct Denoted*)((struct AST_Type_Definition*)tree)->definition);
- break;
- case ST_FUNCTION_DECLARATION:
- print_denoted(out,(struct Denoted*)((struct AST_Function_Declaration*)tree)->function);
- break;
- case ST_FUNCTION_DEFINITION:
- print_function_definition(out,((struct AST_Function_Declaration*)tree)->function);
- break;
- case TRANSLATION_UNIT:
- print_translation_unit_tree(out,(struct AST_Translation_Unit*)tree);
- break;
- case ERROR:
- print_error_tree(out,(struct AST_Error*)tree);
- break;
- default:
- fprintf(out,"NOT_POSSIBLE");break;
- }
-
- }
-
- void print_function_definition(FILE *out,struct Denoted_Function *function)
- {
- print_token(out,function->id);
- fprintf(out," is a ");
- print_type(out,function->type,1);
- print_ast(out,(struct AST*)function->body);
- }
- void print_program_tokens(FILE *out,struct Program *program)
- {
- struct Queue_Node *it;
- struct Queue_Node *it2;
- it=program->source_files.first;
- it2=program->translation_units_tokens.first;
- for(;it!=NULL && it2!=NULL;it=it->prev,it2=it2->prev)
- {
- fprintf(out,"TOKENS for %s\n{\n",((struct Source_File*)(it->data))->src_name);
- print_tokens(out,it2->data);
- fprintf(out,"TOKENS_END for %s\n}\n",((struct Source_File*)(it->data))->src_name);
- }
- }
- void print_program_ast(FILE *out,struct Program *program)
- {
- size_t i;
- struct Queue_Node *it;
- it=program->source_files.first;
- for( i=0; (i<program->number_of_translation_units) && it!=NULL;++i,it=it->prev)
- {
- fprintf(out,"TRANSLATION_UNIT for %s\n{\n",((struct Source_File*)(it->data))->src_name);
- print_ast(out,program->translation_units[i]);
- fprintf(out,"TRANSLATION_UNIT_END for %s\n}\n",((struct Source_File*)(it->data))->src_name);
- }
- }
- void print_keyword_enum(FILE *out,enum KEYWORDS kw)
- {
- switch(kw)
- {
- case KW_AUTO :
- fprintf(out," KW_AUTO ");break;
- case KW_DO :
- fprintf(out," KW_DO ");break;
- case KW_DOUBLE :
- fprintf(out," KW_DOUBLE ");break;
- case KW_INT :
- fprintf(out," KW_INT ");break;
- case KW_STRUCT :
- fprintf(out," KW_STRUCT ");break;
- case KW_BREAK :
- fprintf(out," KW_BREAK ");break;
- case KW_ELSE :
- fprintf(out," KW_ELSE ");break;
- case KW_LONG :
- fprintf(out," KW_LONG ");break;
- case KW_SWITCH :
- fprintf(out," KW_SWITCH ");break;
- case KW_CASE :
- fprintf(out," KW_CASE ");break;
- case KW_ENUM :
- fprintf(out," KW_ENUM ");break;
- case KW_REGISTER :
- fprintf(out," KW_REGISTER ");break;
- case KW_TYPEDEF :
- fprintf(out," KW_TYPEDEF ");break;
- case KW_CHAR :
- fprintf(out," KW_CHAR ");break;
- case KW_EXTERN :
- fprintf(out," KW_EXTERN ");break;
- case KW_RETURN :
- fprintf(out," KW_RETURN ");break;
- case KW_UNION :
- fprintf(out," KW_UNION ");break;
- case KW_CONST :
- fprintf(out," KW_CONST ");break;
- case KW_FLOAT :
- fprintf(out," KW_FLOAT ");break;
- case KW_SHORT :
- fprintf(out," KW_SHORT ");break;
- case KW_UNSIGNED :
- fprintf(out," KW_UNSIGNED ");break;
- case KW_CONTINUE :
- fprintf(out," KW_CONTINUE ");break;
- case KW_FOR :
- fprintf(out," KW_FOR ");break;
- case KW_SIGNED :
- fprintf(out," KW_SIGNED ");break;
- case KW_VOID :
- fprintf(out," KW_VOID ");break;
- case KW_DEFAULT :
- fprintf(out," KW_DEFAULT ");break;
- case KW_GOTO :
- fprintf(out," KW_GOTO ");break;
- case KW_SIZEOF :
- fprintf(out," KW_SIZEOF ");break;
- case KW_VOLATILE :
- fprintf(out," KW_VOLATILE ");break;
- case KW_IF :
- fprintf(out," KW_IF ");break;
- case KW_STATIC :
- fprintf(out," KW_STATIC ");break;
- case KW_WHILE :
- fprintf(out," KW_WHILE ");break;
- case KW_EXCLAMATION :
- fprintf(out," KW_EXCLAMATION ");break;
- case KW_BACK_SLASH :
- fprintf(out," KW_BACK_SLASH ");break;
- case KW_PERCENT :
- fprintf(out," KW_PERCENT ");break;
- case KW_AND :
- fprintf(out," KW_AND ");break;
- case KW_AND_AND :
- fprintf(out," KW_AND_AND ");break;
- case KW_QUOTE :
- fprintf(out," KW_QUOTE ");break;
- case KW_OPEN_NORMAL :
- fprintf(out," KW_OPEN_NORMAL ");break;
- case KW_CLOSE_NORMAL :
- fprintf(out," KW_CLOSE_NORMAL ");break;
- case KW_STAR :
- fprintf(out," KW_STAR ");break;
- case KW_PLUS :
- fprintf(out," KW_PLUS ");break;
- case KW_COMMA :
- fprintf(out," KW_COMMA ");break;
- case KW_MINUS :
- fprintf(out," KW_MINUS ");break;
- case KW_DOT :
- fprintf(out," KW_DOT ");break;
- case KW_ARROW :
- fprintf(out," KW_ARROW ");break;
- case KW_COLUMN :
- fprintf(out," KW_COLUMN ");break;
- case KW_SEMI_COLUMN :
- fprintf(out," KW_SEMI_COLUMN ");break;
- case KW_LESS :
- fprintf(out," KW_LESS ");break;
- case KW_EQ :
- fprintf(out," KW_EQ ");break;
- case KW_EQEQ :
- fprintf(out," KW_EQEQ ");break;
- case KW_MORE :
- fprintf(out," KW_MORE ");break;
- case KW_QUESTION :
- fprintf(out," KW_QUESTION ");break;
- case KW_OPEN_SQUARE :
- fprintf(out," KW_OPEN_SQUARE ");break;
- case KW_CLOSE_SQUARE :
- fprintf(out," KW_CLOSE_SQUARE ");break;
- case KW_HAT :
- fprintf(out," KW_HAT ");break;
- case KW_FLOOR :
- fprintf(out," KW_FLOOR ");break;
- case KW_OPEN_CURLY :
- fprintf(out," KW_OPEN_CURLY ");break;
- case KW_CLOSE_CURLY :
- fprintf(out," KW_CLOSE_CURLY ");break;
- case KW_PIPE :
- fprintf(out," KW_PIPE ");break;
- case KW_PIPE_PIPE :
- fprintf(out," KW_PIPE_PIPE ");break;
- case KW_TILDE :
- fprintf(out," KW_TILDE ");break;
- case KW_PLUSPLUS :
- fprintf(out," KW_PLUSPLUS ");break;
- case KW_MINUSMINUS :
- fprintf(out," KW_MINUSMINUS ");break;
- case KW_SHIFT_RIGHT :
- fprintf(out," KW_SHIFT_RIGHT ");break;
- case KW_SHIFT_LEFT :
- fprintf(out," KW_SHIFT_LEFT ");break;
- case KW_LESS_EQ :
- fprintf(out," KW_LESS_EQ ");break;
- case KW_MORE_EQ :
- fprintf(out," KW_MORE_EQ ");break;
- case KW_NOT_EQ :
- fprintf(out," KW_NOT_EQ ");break;
- case KW_PLUS_EQ :
- fprintf(out," KW_PLUS_EQ ");break;
- case KW_MINUS_EQ :
- fprintf(out," KW_MINUS_EQ ");break;
- case KW_STAR_EQ :
- fprintf(out," KW_STAR_EQ ");break;
- case KW_PERCENT_EQ :
- fprintf(out," KW_PERCENT_EQ ");break;
- case KW_SHIFT_LEFT_EQ :
- fprintf(out," KW_SHIFT_LEFT_EQ ");break;
- case KW_SHIFT_RIGHT_EQ :
- fprintf(out," KW_SHIFT_RIGHT_EQ ");break;
- case KW_AND_EQ :
- fprintf(out," KW_AND_EQ ");break;
- case KW_HAT_EQ :
- fprintf(out," KW_HAT_EQ ");break;
- case KW_PIPE_EQ :
- fprintf(out," KW_PIPE_EQ ");break;
- case KW_DIV_EQ :
- fprintf(out," KW_DIV_EQ ");break;
- case KW_FORWARD_SLASH :
- fprintf(out," KW_FORWARD_SLASH ");break;
- case KW_NOTYPE :
- fprintf(out," KW_NOTYPE ");break;
- case KW_NUMBER :
- fprintf(out," KW_NUMBER ");break;
- case KW_COMMENT :
- fprintf(out," KW_COMMENT ");break;
- case KW_ID :
- fprintf(out," KW_ID ");break;
- case KW_STRING :
- fprintf(out," KW_STRING ");break;
- }
- }
- #undef TOK
- #undef INDENT
-
- #endif
F diff --git a/print.h b/print.h
deleted file mode 100644
--- a/print.h
+++ /dev/null
- #ifndef GCC_PRINT_H
- #define GCC_PRINT_H GCC_PRINT_H
-
- #include<stdio.h>
- #include<assert.h>
- #include "all.h"
-
-
- #define INDENT for(int j=0;j<indent;++j) fprintf(out," ");
- #define TOK(s) ((struct token*)(s))
- #define ASTPTR(s) ((struct AST*)(s))
-
- int indent;
-
- void print_token(FILE *out,struct token *token);
- void print_tokens(FILE *out,struct Queue *tokens);
- void print_ast_enum(FILE *out,enum AST_Type op);
- void print_error_tree(FILE *out,struct AST_Error *error);
- void print_binary_expression_tree(FILE *out,struct AST_Binary_Expression *bin);
- void print_conditional_expression_tree(FILE *out,struct AST_Conditional_Expression *cond);
- void print_function_expression_tree(FILE *out,struct AST_Function_Expression *function_call);
- void print_unary_expression_tree(FILE *out,struct AST_Unary_Expression *unary_expression);
- void print_rvalue_expression_tree(FILE *out,struct AST_Rvalue_Expression *rval);
- void print_lvalue_expression_tree(FILE *out,struct AST_Lvalue_Expression *lval);
- void print_labeled_statement_tree(FILE *out,struct AST_Labeled_Statement *lab);
- void print_compound_statement_tree(FILE *out,struct AST_Compound_Statement *comp);
- void print_if_statement_tree(FILE *out,struct AST_If_Statement *ifs);
- void print_switch_statement_tree(FILE *out,struct AST_Switch_Statement *swi);
- void print_while_statement_tree(FILE *out,struct AST_While_Statement *whi);
- void print_do_while_statement_tree(FILE *out,struct AST_Do_While_Statement *whi);
- void print_for_statement_tree(FILE *out,struct AST_For_Statement *fo);
- void print_return_statement_tree(FILE *out,struct AST_Return_Statement *return_expression);
- void print_goto_statement_tree(FILE *out,struct AST_Goto_Statement *got);
- void print_type(FILE *out,struct Type *type,char print_struct_union);
- void print_denoted(FILE *out,struct Denoted *denoted);
- void print_list_of_denoted(FILE *out,struct Queue *denoted);
- void print_enumeration(FILE *out,struct Enum *enumeration);
- void print_struct_union(FILE *out,struct Struct_Union *struct_union);
- void print_translation_unit_tree(FILE *out,struct AST_Translation_Unit *unit);
- void print_ast(FILE *out,struct AST* tree);
- void print_program_tokens(FILE *out,struct Program *program);
- void print_program_ast(FILE *out,struct Program *program);
- void print_keyword_enum(FILE *out,enum KEYWORDS kw);
- void print_function_definition(FILE *out,struct Denoted_Function *function);
-
-
- #endif
F diff --git a/program.c b/program.c
deleted file mode 100644
--- a/program.c
+++ /dev/null
- #ifndef GCC_PROGRAM_C
- #define GCC_PROGRAM_C GCC_PROGRAM_C
- #/*Don't mind me*/include/*When I grow up I want to be a new line*/"program.h"
- #include"parse_translation_unit.h"
-
-
- struct Program* get_program()
- {
- struct Program *ret;
- ret=malloc(sizeof(struct Program));
- Queue_Init(&ret->translation_units_tokens);
- Queue_Init(&ret->source_files);
- Map_Init(&ret->defines);
- ret->global_scope=get_scope(NULL);
-
- ret->number_of_translation_units=0;
- ret->translation_units=NULL;
-
- return ret;
- }
- struct Source_File* get_source_file(char *name_of_file)
- {
- FILE *in;
- size_t file_size;
- struct Source_File *src;
-
- in=fopen(name_of_file,"r");
- if(in==NULL)
- {
- /*error*/
- return NULL;
- }
-
- fseek(in,0,SEEK_END);
- file_size=ftell(in);
- rewind(in);
-
- src=malloc(sizeof(struct Source_File));
- src->src_name=name_of_file;
- src->src=malloc(file_size+1);
- src->src_size=file_size;
- src->where_in_src=0;
- src->which_column=0;
- src->which_row=0;
- src->src[file_size]='\0';
-
- fread(src->src,1,file_size,in);
- fclose(in);
- return src;
- }
- struct Queue* lex_source_file(char *name_of_file,struct Program* program)
- {
- struct Source_File *src;
- src=get_source_file(name_of_file);
-
- Queue_Push(&program->translation_units_tokens,lex(src,program));
- Queue_Push(&program->source_files,src);
- }
- void lex_program(char *name_of_file,struct Program *program)
- {
- lex_source_file(name_of_file,program);
- }
-
- void parse_program(struct Program *program)
- {
- size_t i;
- program->translation_units=malloc(sizeof(struct AST*) * program->translation_units_tokens.size);
- program->number_of_translation_units=program->translation_units_tokens.size;
- for(i=0;i<program->number_of_translation_units;++i)
- {
- program->translation_units[i]=parse_translation_unit(
- Queue_Pop(&program->translation_units_tokens),
- program->global_scope
- );
- }
- }
- #endif
F diff --git a/program.h b/program.h
deleted file mode 100644
--- a/program.h
+++ /dev/null
- #ifndef GCC_PROGRAM_H
- #define GCC_PROGRAM_H GCC_PROGRAM_H
- #include "program.hh"
- #include "queue.h"
- #include "scope.h"
- #include "lexer.h"
-
- struct Source_File
- {
- char *src;
- char *src_name;
- size_t src_size;
-
- size_t where_in_src;
- size_t which_column;
- size_t which_row;
- };
-
-
- struct Program
- {
-
- struct Queue translation_units_tokens;
- struct Queue source_files;
- struct Map defines;
-
- size_t number_of_translation_units;
- struct AST **translation_units;
-
- struct Scope *global_scope;
- };
-
- struct Program* get_program();
- struct Source_File* get_source_file(char *name_of_file);
- struct Queue* lex_source_file(char *name_of_file,struct Program *program);
- void lex_program(char *name_of_file,struct Program *program);
- void parse_program(struct Program *program);
-
-
- #endif
F diff --git a/program.hh b/program.hh
deleted file mode 100644
--- a/program.hh
+++ /dev/null
- #ifndef GCC_PROGRAM_HH
- #define GCC_PROGRAM_HH GCC_PROGRAM_HH
-
- struct Source_File;
- struct Program;
-
-
- #endif
F diff --git a/queue.c b/queue.c
deleted file mode 100644
--- a/queue.c
+++ /dev/null
- #ifndef GQUEUE_C
- #define GQUEUE_C GQUEUE_C
- #include "queue.h"
-
- void Queue_Init(Queue *q)
- {
- q->first=q->last=NULL;
- q->size=0;
- }
- void Queue_Push(Queue *q,void *data)
- {
- if(q==NULL)return;
- if(q->first==NULL)
- {
- q->first=q->last=malloc(sizeof(struct Queue_Node));
-
- q->first->data=data;
- q->last->prev=NULL;
-
- ++q->size;
- return;
- }else
- {
- struct Queue_Node *temp=malloc(sizeof(struct Queue_Node));
- q->last->prev=temp;
- temp->data=data;
- temp->prev=NULL;
-
- q->last=temp;
- ++q->size;
- }
-
- }
- /*max queueiness*/
- void Queue_Push_Front(struct Queue *q,void *data)
- {
- if(q==NULL)return;
- if(q->first==NULL)
- {
- q->first=q->last=malloc(sizeof(struct Queue_Node));
-
- q->first->data=data;
- q->last->prev=NULL;
-
- ++q->size;
- }else
- {
- struct Queue_Node *temp=malloc(sizeof(struct Queue_Node));
- temp->prev=q->first;
- temp->data=data;
-
- q->first=temp;
- ++q->size;
- }
-
- }
- void* Queue_Pop(Queue *q)
- {
- if(q==NULL)return NULL;
- if(q->size==0)return NULL;
-
- void *return_value=q->first->data;
-
- if(q->size==1)
- {
- free(q->last);
- q->first=q->last=NULL;
- q->size=0;
- }else
- {
- struct Queue_Node *temp_first=q->first;
- q->first=q->first->prev;
- free(temp_first);
- --q->size;
- }
- return return_value;
- }
- void Queue_Append(struct Queue *lead,struct Queue *follower)
- {
- assert(lead!=NULL);
- lead->last->prev=follower->first;
- lead->last=follower->last;
-
- lead->size+=follower->size;
- }
-
- void Queue_Destroy(Queue *q)
- {
-
- struct Queue_Node *temp_first;
- while(q->first!=NULL)
- {
- temp_first=q->first;
- q->first=q->first->prev;
- free(temp_first->data);
- free(temp_first);
- }
-
- }
- /*
- Fits a new Queue on top of q. It uses its elements as its own
- Do not destroy
- last element ->prev is may not be null
- */
- struct Queue Queue_Fit(struct Queue *q,size_t offset)
- {
- assert(q->size>offset && offset>0);
-
- struct Queue ret;
- size_t i;
-
- ret.size=q->size-offset;
- ret.first=q->first;
- ret.last=q->last;
-
- for(i=0;i<offset;++i)
- {
- ret.first=ret.first->prev;
- }
- return ret;
-
- }
- #endif //#ifndef GQUEUE_C
F diff --git a/queue.h b/queue.h
deleted file mode 100644
--- a/queue.h
+++ /dev/null
- #ifndef GQUEUE_H
- #define GQUEUE_H GQUEUE_H
- #include<stdlib.h>//malloc free
- #include<assert.h>
-
- typedef struct Queue Queue;
-
- struct Queue
- {
- struct Queue_Node
- {
- void *data;
- struct Queue_Node *prev;
- }*first,*last;
-
- size_t size;
-
- };
- void Queue_Init(Queue *q);
- void Queue_Push(Queue *q,void *data);
- void Queue_Push_Front(struct Queue *q,void *data);
- void* Queue_Pop(Queue *q);
- void Queue_Append(struct Queue *lead,struct Queue *follower);
- void Queue_Destroy(Queue *q);
-
- #endif
F diff --git a/scope.c b/scope.c
deleted file mode 100644
--- a/scope.c
+++ /dev/null
- #ifndef GCC_SCOPE_C
- #define GCC_SCOPE_C GCC_SCOPE_C
- #include "scope.h"
-
-
- struct Scope* get_scope(struct Scope *parent)
- {
- struct Scope *ret;
- ret=malloc(sizeof(struct Scope));
- Map_Init(&ret->labels);
- Map_Init(&ret->tags);
- Map_Init(&ret->ordinary);
- ret->parent=parent;
- if(parent==NULL)
- {
- ret->location=get_global_location();
- }else
- {
- ret->location=(struct Location*)get_relative_location(parent->location,0);
- }
- return ret;
- }
-
- void* check_label(struct Scope *current,struct token *id)
- {
- void *hold;
- hold=NULL;
- while(current!=NULL && hold==NULL)
- {
- hold=Map_Check(¤t->labels,id->data,id->data_size);
- current=current->parent;
- }
- return hold;
- }
-
- struct Denoted* check_tag(struct Scope *current,struct token *id)
- {
- void *hold;
- hold=NULL;
- while(current!=NULL && hold==NULL)
- {
- hold=Map_Check(¤t->tags,id->data,id->data_size);
- current=current->parent;
- }
- return hold;
- }
- void* check_ordinary(struct Scope *current,struct token *id)
- {
- void *hold;
- hold=NULL;
- while(current!=NULL && hold==NULL)
- {
- hold=Map_Check(¤t->ordinary,id->data,id->data_size);
- current=current->parent;
- }
- return hold;
- }
-
- void Scope_Push(struct Scope *scope,struct Denoted *declarator)
- {
- switch(declarator->denotation)
- {
- /*
- case DT_Label:
- if(check_label(scope,((struct Denoted_Object
- return 1;
- */
- case DT_Function:
- case DT_Typedef:
- case DT_Object:
- case DT_Enum_Constant:
- case DT_Struct_Union_Member:
- push_ordinary(scope,((struct Denoted_Object*)declarator)->id,declarator);
- return;
- case DT_Enum:
- case DT_Struct_Union_Tag:
- push_tag(scope,((struct Denoted_Object*)declarator)->id,declarator);
- return;
- }
- }
- char check_if_typedefed(struct Scope* scope,struct token *id)
- {
- struct Denoted *hold;
- hold=check_ordinary(scope,id);
- if(hold==NULL || hold->denotation!=DT_Typedef)
- return 0;
- else
- return 1;
-
- }
- void push_tag(struct Scope *current,struct token *id,struct Denoted *denot)
- {
- Map_Push(¤t->tags,id->data,id->data_size,denot);
- }
- void push_ordinary(struct Scope *current,struct token *id,struct Denoted *denot)
- {
- Map_Push(¤t->ordinary,id->data,id->data_size,denot);
- }
- #endif
F diff --git a/scope.h b/scope.h
deleted file mode 100644
--- a/scope.h
+++ /dev/null
- #ifndef GCC_SCOPE_H
- #define GCC_SCOPE_H GCC_SCOPE_H
- #include "scope.hh"
- #include "map.h"
- #include "denoted.h"
- #include "location.h"
-
- struct Scope
- {
- Map labels;
-
- Map tags;
- /*In go denoted*/
- Map ordinary;
-
- struct Scope *parent;
- struct Location *location;
- };
-
-
- struct Scope* get_scope(struct Scope *parent);
-
- void* check_label(struct Scope *current,struct token *id);
-
- void push_label(struct Scope *current,struct token *id);/*TODO*/
-
- struct Denoted* check_tag(struct Scope *current,struct token *id);
- void push_tag(struct Scope *current,struct token *id,struct Denoted *denot);
-
- void* check_ordinary(struct Scope *current,struct token *id);
- void push_ordinary(struct Scope *current,struct token *id,struct Denoted *denot);
-
- void Scope_Push(struct Scope *scope,struct Denoted *declarator);
- char check_if_typedefed(struct Scope* scope,struct token *id);
- #endif
F diff --git a/scope.hh b/scope.hh
deleted file mode 100644
--- a/scope.hh
+++ /dev/null
- #ifndef GCC_SCOPE_HH
- #define GCC_SCOPE_HH GCC_SCOPE_HH
-
- struct Scope;
-
- #endif
F diff --git a/semantics.c b/semantics.c
deleted file mode 100644
--- a/semantics.c
+++ /dev/null
- #ifndef GCC_SEMANTICS_C
- #define GCC_SEMANTICS_C GCC_SEMANTICS_C
- #include"semantics.h"
-
-
-
- long long int evaluate_const_expression_integer(struct AST *expression)
- {
- switch(expression->type)
- {
- case OP_ADDITION:
- return
- evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->left)
- +
- evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->right);
- break;
- case OP_SUBTRACTION:
- return
- evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->left)
- -
- evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->right);
- break;
- case OP_DIV:
- return
- evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->left)
- /
- evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->right);
- break;
- case OP_MUL:
- return
- evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->left)
- *
- evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->right);
- break;
- case OP_RVALUE:
- if(RVAL_EXPR_PTR(expression)->id->type==KW_NUMBER)
- {
- return evaluate_literal_integer_dec(RVAL_EXPR_PTR(expression)->id);
- }
- break;
- }
- /*shouldnt reach here*/
- return 0;
-
- }
-
- long long int evaluate_literal_integer_dec(struct token *token)
- {
- long long int accumulate=0;
- size_t i;
- for(i=0;i<token->data_size;++i)
- {
- accumulate*=10;
- accumulate+=token->data[i]-'0';
- }
- return accumulate;
-
- }
-
-
- #endif
F diff --git a/semantics.h b/semantics.h
deleted file mode 100644
--- a/semantics.h
+++ /dev/null
- #ifndef GCC_SEMANTICS_H
- #define GCC_SEMANTICS_H GCC_SEMANTICS_H
- #include "ast.h"
- #include "lexer.h"
-
- long long int evaluate_const_expression_integer(struct AST *expression);
- long long int evaluate_literal_integer_dec(struct token *token);
- #endif
F diff --git a/semantics/ast.c b/semantics/ast.c
new file mode 100644
--- /dev/null
+++ b/semantics/ast.c
+ #ifndef GCC_AST_C
+ #define GCC_AST_C GCC_AST_C
+ #include "ast.h"
+
+ struct AST_Error* get_error_tree(struct AST *error)
+ {
+ struct AST_Error *ret;
+ ret=malloc(sizeof(struct AST_Error));
+ ret->type=ERROR;
+ ret->error=error;
+ return ret;
+ }
+ struct AST_Declaration_Error* get_declaration_error_tree(struct Denoted *error)
+ {
+
+ struct AST_Declaration_Error *ret;
+ ret=malloc(sizeof(struct AST_Declaration_Error));
+ ret->type=ERROR_DECLARATION;
+ ret->error=error;
+ return ret;
+ }
+
+ struct AST_Binary_Expression* get_binary_expression_tree(struct AST *left,struct AST *right,enum AST_Type type)
+ {
+ struct AST_Binary_Expression *ret;
+ ret=malloc(sizeof(struct AST_Binary_Expression));
+ ret->type=type;
+ ret->left=left;
+ ret->right=right;
+
+ return ret;
+ }
+ struct AST_Conditional_Expression* get_conditional_expression_tree(struct AST *left,struct AST *center,struct AST *right)
+ {
+ struct AST_Conditional_Expression *ret;
+ ret=malloc(sizeof(struct AST_Conditional_Expression));
+ ret->type=OP_COND;
+ ret->left=left;
+ ret->center=center;
+ ret->right=right;
+ return ret;
+ }
+
+ struct AST_Function_Expression* get_function_expression_tree(struct AST* id,struct Scope *scope)
+ {
+ struct AST_Function_Expression *ret;
+ ret=malloc(sizeof(struct AST_Function_Expression));
+ ret->type=OP_FUNCTION;
+ ret->id=id;
+ Queue_Init(&ret->arguments);
+ return ret;
+ }
+ struct AST_Unary_Expression* get_unary_expression_tree(struct AST *operand,enum AST_Type type)
+ {
+
+ struct AST_Unary_Expression *ret;
+ ret=malloc(sizeof(struct AST_Unary_Expression));
+ ret->operand=operand;
+ ret->type=type;
+
+ return ret;
+ }
+ struct AST_Rvalue_Expression* get_rvalue_expression_tree(struct token *id)
+ {
+ struct AST_Rvalue_Expression *ret;
+ ret=malloc(sizeof(struct AST_Rvalue_Expression));
+ ret->type=OP_RVALUE;
+ ret->id=id;
+ return ret;
+ }
+ struct AST_Lvalue_Expression* get_lvalue_expression_tree(struct token *id,struct Scope* scope)
+ {
+ struct AST_Lvalue_Expression *ret;
+ ret=malloc(sizeof(struct AST_Lvalue_Expression));
+ ret->type=OP_LVALUE;
+ ret->id=id;
+ ret->value_type=check_ordinary(scope,id);
+ if(ret->value_type==NULL)
+ {
+ /*TODO error*/
+ }
+ return ret;
+ }
+
+
+
+
+
+ struct AST_Labeled_Statement* get_labeled_statement_tree(struct token *label,struct AST* statement,struct Scope *scope,enum AST_Type type)
+ {
+ struct AST_Labeled_Statement *ret;
+ ret=malloc(sizeof(struct AST_Labeled_Statement));
+ ret->type=type;
+ ret->label=label;
+ ret->statement=statement;
+ ret->scope=scope;
+
+ return ret;
+ }
+ struct AST_Compound_Statement* get_compound_statement_tree(struct Scope *parent_scope)
+ {
+ struct AST_Compound_Statement *ret;
+ ret=malloc(sizeof(struct AST_Compound_Statement));
+ ret->type=ST_COMPOUND;
+ Queue_Init(&ret->components);
+ ret->scope=get_scope(parent_scope);
+ return ret;
+ }
+ struct AST_If_Statement* get_if_statement_tree()
+ {
+ struct AST_If_Statement *ret;
+ ret=malloc(sizeof(struct AST_If_Statement));
+ ret->type=ST_IF;
+
+ return ret;
+ }
+ struct AST_Switch_Statement* get_switch_statement_tree()
+ {
+ struct AST_Switch_Statement *ret;
+ ret=malloc(sizeof(struct AST_Switch_Statement));
+ ret->type=ST_SWITCH;
+ return ret;
+ }
+ struct AST_While_Statement* get_while_statement_tree()
+ {
+ struct AST_While_Statement *ret;
+ ret=malloc(sizeof(struct AST_While_Statement));
+ ret->type=ST_WHILE;
+ return ret;
+ }
+ struct AST_Do_While_Statement* get_do_while_statement_tree()
+ {
+ struct AST_Do_While_Statement *ret;
+ ret=malloc(sizeof(struct AST_Do_While_Statement));
+ ret->type=ST_DO_WHILE;
+ return ret;
+ }
+
+ struct AST_For_Statement* get_for_statement_tree()
+ {
+ struct AST_For_Statement *ret;
+ ret=malloc(sizeof(struct AST_For_Statement));
+ ret->type=ST_FOR;
+ return ret;
+ }
+ struct AST_Return_Statement* get_return_statement_tree(struct AST* return_expression)
+ {
+ struct AST_Return_Statement *ret;
+ ret=malloc(sizeof(struct AST_If_Statement));
+ ret->type=ST_RETURN;
+ ret->return_expression=return_expression;
+ return ret;
+ }
+
+ struct AST_Goto_Statement* get_goto_statement_tree(struct token *label,struct Scope *scope)
+ {
+ struct AST_Goto_Statement *ret;
+ ret=malloc(sizeof(struct AST_Goto_Statement));
+ ret->type=ST_GOTO;
+ ret->label=label;
+ return ret;
+ }
+
+
+ struct AST* get_nop_tree()
+ {
+ struct AST* ret;
+ ret=malloc(sizeof(struct AST*));
+ ret->type=OP_NOP;
+ return ret;
+ }
+
+
+
+ struct AST_Type_Definition* get_type_definition_tree(struct Denoted_Typedef *definition,struct Scope *scope)
+ {
+ struct AST_Type_Definition *ret;
+ ret=malloc(sizeof(struct AST_Type_Definition));
+ ret->type=ST_TYPE_DEFINITION;
+ ret->definition=definition;
+ ret->scope=scope;
+
+ return ret;
+
+ }
+ struct AST_Object_Declaration* get_object_declaration_tree(struct Denoted_Object *object,struct AST *initializer,struct Scope *scope)
+ {
+ struct AST_Object_Declaration *ret;
+ ret=malloc(sizeof(struct AST_Object_Declaration));
+ ret->type=ST_OBJECT_DECLARATION;
+ ret->object=object;
+ ret->scope=scope;
+ ret->initializer=initializer;
+
+ return ret;
+ }
+
+ struct AST_Function_Definition* get_function_definition_tree(struct Scope *scope,struct Denoted_Function *function)
+ {
+ struct AST_Function_Definition *ret;
+ ret=malloc(sizeof(struct AST_Function_Definition));
+ ret->type=ST_FUNCTION_DEFINITION;
+ ret->function=function;
+ ret->scope=scope;
+ return ret;
+ }
+
+ struct AST_Function_Declaration* get_function_declaration_tree(struct Scope *scope,struct Denoted_Function *function)
+ {
+ struct AST_Function_Declaration *ret;
+ ret=malloc(sizeof(struct AST_Function_Declaration));
+ ret->type=ST_FUNCTION_DECLARATION;
+ ret->function=function;
+ ret->scope=scope;
+ return ret;
+ }
+ struct AST_Translation_Unit* get_translation_unit_tree(struct Scope* parent_scope)
+ {
+ struct AST_Translation_Unit *ret;
+ ret=malloc(sizeof(struct AST_Translation_Unit));
+ ret->type=TRANSLATION_UNIT;
+ Queue_Init(&ret->components);
+ /*TODO*/
+ //ret->scope=get_scope(parent_scope);
+ ret->scope=parent_scope;
+ return ret;
+ }
+
+
+
+
+
+
+
+
+ #endif
F diff --git a/semantics/ast.h b/semantics/ast.h
new file mode 100644
--- /dev/null
+++ b/semantics/ast.h
+ #ifndef GCC_AST_H
+ #define GCC_AST_H GCC_AST_H
+ #include <ast.hh>
+ #include <scope.h>
+ #include <parse_declaration.h>
+ #include <denoted.h>
+
+
+
+ enum AST_Type;
+
+
+
+ /*
+ struct AST
+ {
+ enum AST_Type type;
+
+ unsigned long value_type;
+ void *data;
+
+ struct Queue arguments;
+
+ };
+ */
+ struct AST
+ {
+ enum AST_Type type;
+ };
+ struct AST_Error
+ {
+ enum AST_Type type;
+ struct AST *error;
+ };
+ struct AST_Declaration_Error
+ {
+ enum AST_Type type;
+ struct Denoted *error;
+ };
+ struct AST_Binary_Expression
+ {
+ enum AST_Type type;
+
+ struct Type *value_type;
+ struct AST *left;
+ struct AST *right;
+
+ };
+ struct AST_Conditional_Expression
+ {
+ enum AST_Type type;
+
+ struct Type *value_type;
+
+ struct AST *left;
+ struct AST *center;
+ struct AST *right;
+
+ };
+ struct AST_Function_Expression
+ {
+ enum AST_Type type;
+ struct Type *value_type;
+
+ struct AST *id;
+ /*queue of astrees*/
+ struct Queue arguments;
+ };
+ struct AST_Rvalue_Expression
+ {
+ enum AST_Type type;
+ struct Type *value_type;
+ struct token *id;
+ };
+ struct AST_Lvalue_Expression
+ {
+ enum AST_Type type;
+ struct Type *value_type;
+ struct token *id;
+ /*TODO*/
+ void *object;
+ };
+ struct AST_Unary_Expression
+ {
+ enum AST_Type type;
+ struct Type *value_type;
+ struct AST *operand;
+ };
+
+ struct AST_Labeled_Statement
+ {
+ enum AST_Type type;
+ struct token *label;
+ struct AST *statement;
+ struct Scope *scope;
+ };
+ struct AST_Compound_Statement
+ {
+ enum AST_Type type;
+ struct Scope *scope;
+ struct Queue components;
+ };
+
+ struct AST_For_Statement
+ {
+ enum AST_Type type;
+ struct AST *condition;
+ struct AST *initialisation;
+ struct AST *update;
+ struct AST *body_statement;
+ };
+ struct AST_While_Statement
+ {
+ enum AST_Type type;
+ struct AST *condition;
+ struct AST *body_statement;
+ };
+ struct AST_Do_While_Statement
+ {
+ enum AST_Type type;
+ struct AST *body_statement;
+ struct AST *condition;
+ };
+ struct AST_If_Statement
+ {
+ enum AST_Type type;
+ struct AST* condition;
+ struct AST* body_statement;
+ struct AST* else_statement;
+
+ };
+ struct AST_Goto_Statement
+ {
+ enum AST_Type type;
+ struct token *label;
+ };
+ struct AST_Switch_Statement
+ {
+ enum AST_Type type;
+ struct AST* condition;
+ struct AST* body_statement;
+ };
+ struct AST_Return_Statement
+ {
+ enum AST_Type type;
+ struct AST* return_expression;
+
+ };
+
+
+ struct AST_Type_Definition
+ {
+ enum AST_Type type;
+ struct Denoted_Typedef *definition;
+ struct Scope *scope;
+ };
+ struct AST_Object_Declaration
+ {
+ enum AST_Type type;
+ struct Denoted_Object *object;
+ struct AST *initializer;
+ struct Scope *scope;
+ };
+ struct AST_Function_Definition
+ {
+ enum AST_Type type;
+ struct Denoted_Function *function;
+ struct Scope *scope;
+ };
+ struct AST_Function_Declaration
+ {
+ enum AST_Type type;
+ struct Denoted_Function *function;
+ struct Scope *scope;
+ };
+ struct AST_Translation_Unit
+ {
+ enum AST_Type type;
+ struct Queue components;
+ struct Scope *scope;
+ };
+
+
+
+
+ struct AST_Error* get_error_tree(struct AST *error);
+ struct AST_Declaration_Error* get_declaration_error_tree(struct Denoted *error);
+ struct AST_Binary_Expression* get_binary_expression_tree(struct AST *left,struct AST *right,enum AST_Type type);
+ struct AST_Conditional_Expression* get_conditional_expression_tree(struct AST *left,struct AST *center,struct AST *right);
+ struct AST_Function_Expression* get_function_expression_tree(struct AST* id,struct Scope *scope);
+ struct AST_Unary_Expression* get_unary_expression_tree(struct AST *operand,enum AST_Type type);
+ struct AST_Rvalue_Expression* get_rvalue_expression_tree(struct token *id);
+ struct AST_Lvalue_Expression* get_lvalue_expression_tree(struct token *id,struct Scope* scope);
+ struct AST_Labeled_Statement* get_labeled_statement_tree(struct token *label,struct AST* statement,struct Scope *scope,enum AST_Type type);
+ struct AST_Compound_Statement* get_compound_statement_tree(struct Scope *parent_scope);
+ struct AST_If_Statement* get_if_statement_tree();
+ struct AST_Switch_Statement* get_switch_statement_tree();
+ struct AST_While_Statement* get_while_statement_tree();
+ struct AST_Do_While_Statement* get_do_while_statement_tree();
+ struct AST_For_Statement* get_for_statement_tree();
+ struct AST_Return_Statement* get_return_statement_tree(struct AST* return_expression);
+ struct AST_Goto_Statement* get_goto_statement_tree(struct token *label,struct Scope *scope);
+ struct AST* get_nop_tree();
+ struct AST_Type_Definition* get_type_definition_tree(struct Denoted_Typedef *definition,struct Scope *scope);
+ struct AST_Object_Declaration* get_object_declaration_tree(struct Denoted_Object *object,struct AST *initializer,struct Scope *scope);
+ struct AST_Function_Declaration* get_function_declaration_tree(struct Scope *scope,struct Denoted_Function *function);
+ struct AST_Function_Definition* get_function_definition_tree(struct Scope *scope,struct Denoted_Function *function);
+ struct AST_Translation_Unit* get_translation_unit_tree(struct Scope* parent_scope);
+
+
+ #define BIN_EXPR_PTR(x) ((struct AST_Binary_Expression*)(x))
+ #define UN_EXPR_PTR(x) ((struct AST_Unary_Expression*)(x))
+ #define LVAL_EXPR_PTR(x) ((struct AST_Lvalue_Expression*)(x))
+ #define RVAL_EXPR_PTR(x) ((struct AST_Rvalue_Expression*)(x))
+ #define DECLR_PTR(x) ((struct AST_Declaration*)(x))
+ #define IF_ST_PTR(s) ((struct AST_If_Statement*)(x))
+
+
+
+ #endif
F diff --git a/semantics/ast.hh b/semantics/ast.hh
new file mode 100644
--- /dev/null
+++ b/semantics/ast.hh
+ #ifndef GCC_AST_HH
+ #define GCC_AST_HH GCC_AST_HH
+
+ enum AST_Type{
+ OP_COMMA
+ ,OP_ADDITION,OP_SUBTRACTION,OP_MUL,OP_DIV,OP_REMAINDER
+ ,OP_COND,OP_FUNCTION
+ ,OP_ASSIGN,OP_ADD_ASSIGN,OP_SUBTRACT_ASSIGN,OP_MULTIPLY_ASSIGN,OP_REMAINDER_ASSIGN,OP_DIV_ASSIGN
+ ,OP_SHIFT_LEFT_ASSIGN,OP_SHIFT_RIGHT_ASSIGN
+ ,OP_AND_ASSIGN,OP_XOR_ASSIGN,OP_PIPE_ASSIGN
+ ,OP_NOP
+ ,OP_LOGICAL_OR,OP_LOGICAL_AND,OP_LOGICAL_NOT
+ ,OP_BITWISE_OR,OP_BITWISE_AND,OP_BITWISE_XOR,OP_BITWISE_NOT
+ ,OP_ADDR_OF,OP_DEREFERENCE,OP_MEMBER_TROUGH_PTR,OP_MEMBER,OP_ARR_SUBSCRIPT
+ ,OP_POSTFIX_INC,OP_POSTFIX_DEC
+ ,OP_PREFIX_INC,OP_PREFIX_DEC
+ ,OP_UNARY_PLUS,OP_UNARY_MINUS
+ ,OP_CAST,OP_SIZEOF
+ ,OP_SHIFT_LEFT,OP_SHIFT_RIGHT
+ ,OP_LESS_EQ,OP_GREATER_EQ
+ ,OP_LESS,OP_GREATER
+ ,OP_EQUAL,OP_NOT_EQUAL
+ ,OP_LVALUE,OP_RVALUE
+ ,ST_COMPOUND,ST_EXPRESSION,ST_SWITCH,ST_IF,ST_WHILE,ST_DO_WHILE,ST_GOTO,ST_LABEL,ST_CASE,ST_DEFAULT
+ ,ST_CONTINUE,ST_BREAK,ST_RETURN,ST_FOR
+ ,ST_OBJECT_DECLARATION,ST_TYPE_DEFINITION,ST_FUNCTION_DEFINITION
+ ,ST_FUNCTION_DECLARATION
+ ,TRANSLATION_UNIT
+ ,ERROR,ERROR_DECLARATION
+ };
+ struct AST;
+ struct AST_Error;
+ struct AST_Declaration_Error;
+ struct AST_Binary_Expression;
+ struct AST_Conditional_Expression;
+ struct AST_Function_Expression;
+ struct AST_Rvalue_Expression;
+ struct AST_Lvalue_Expression;
+ struct AST_Unary_Expression;
+ struct AST_Labeled_Statement;
+ struct AST_Compound_Statement;
+ struct AST_For_Statement;
+ struct AST_While_Statement;
+ struct AST_Do_While_Statement;
+ struct AST_If_Statement;
+ struct AST_Goto_Statement;
+ struct AST_Switch_Statement;
+ struct AST_Return_Statement;
+ struct AST_Type_Definition;
+ struct AST_Object_Declaration;
+ struct AST_Function_Definition;
+ struct AST_Function_Declaration;
+ struct AST_Translation_Unit;
+
+ #endif
F diff --git a/semantics/denoted.c b/semantics/denoted.c
new file mode 100644
--- /dev/null
+++ b/semantics/denoted.c
+ #ifndef GCC_DENOTED_C
+ #define GCC_DENOTED_C GCC_DENOTED_C
+ #include "denoted.h"
+
+ struct Denoted* get_denoted_error(struct Denoted *error)
+ {
+ struct Denoted_Error *ret;
+ ret=malloc(sizeof(struct Denoted_Error));
+ ret->denotation=DT_Error;
+ ret->error=error;
+
+ return (struct Denoted*)ret;
+ }
+ struct Denoted* get_denoted_base(struct token *id,struct Type *type,enum Denotation_Type denotation)
+ {
+ struct Denoted_Base *ret;
+ ret=malloc(sizeof(struct Denoted_Base));
+ ret->denotation=denotation;
+ ret->id=id;
+ ret->type=type;
+
+
+ return (struct Denoted*)ret;
+ }
+ struct Denoted* get_denoted_function(struct token *id,struct Type *return_type,enum Function_Specifier fs)
+ {
+ struct Denoted_Function *ret;
+ ret=malloc(sizeof(struct Denoted_Function));
+ ret->denotation=DT_Function;
+ ret->id=id;
+ ret->type=return_type;
+ ret->function_specifier=fs;
+ ret->body=NULL;
+
+ return (struct Denoted*)ret;
+ }
+ struct Denoted* get_denoted_object(struct token *id, enum Storage_Class sc,struct Type *type)
+ {
+ struct Denoted_Object *ret;
+ ret=malloc(sizeof(struct Denoted_Object));
+ ret->denotation=DT_Object;
+ ret->id=id;
+
+ ret->object=malloc(sizeof(struct Object));
+ ret->object->type=type;
+ ret->object->location=NULL;
+ ret->object->storage_class=sc;
+
+ return (struct Denoted*)ret;
+ }
+
+ struct Denoted* get_denoted_typedef(struct Denoted_Base *base)
+ {
+ struct Denoted_Typedef *ret;
+ ret=malloc(sizeof(struct Denoted_Typedef));
+ ret->denotation=DT_Typedef;
+ ret->type=base->type;
+ ret->id=base->id;
+
+ return (struct Denoted*)ret;
+
+ }
+ struct Denoted* get_denoted_enum_const_expr(struct token *id,struct Enum *parent,struct AST* expression)
+ {
+ struct Denoted_Enum_Const *ret;
+ ret=malloc(sizeof(struct Denoted_Enum_Const));
+ ret->denotation=DT_Enum_Constant;
+ ret->id=id;
+ ret->parent=parent;
+ ret->expression=expression;
+ ret->value=evaluate_const_expression_integer(expression);
+
+ return (struct Denoted*)ret;
+
+ }
+ struct Denoted* get_denoted_enum_const_num(struct token *id,struct Enum *parent,int value)
+ {
+ struct Denoted_Enum_Const *ret;
+ ret=malloc(sizeof(struct Denoted_Enum_Const));
+ ret->denotation=DT_Enum_Constant;
+ ret->id=id;
+ ret->parent=parent;
+ ret->expression=NULL;
+ ret->value=value;
+
+ return (struct Denoted*)ret;
+ }
+ struct Denoted* get_denoted_enum(struct token *id,struct Enum *enumerator)
+ {
+ struct Denoted_Enum *ret;
+ ret=malloc(sizeof(struct Denoted_Enum));
+ ret->denotation=DT_Enum;
+ ret->id=id;
+ ret->enumeration=enumerator;
+
+ return (struct Denoted*)ret;
+ }
+ struct Denoted* get_denoted_struct_union(struct token *id,struct Struct_Union *struct_union)
+ {
+ struct Denoted_Struct_Union *ret;
+ ret=malloc(sizeof(struct Denoted_Struct_Union));
+ ret->denotation=DT_Struct_Union_Tag;
+ ret->id=id;
+ ret->struct_union=struct_union;
+
+ return (struct Denoted*)ret;
+ }
+ struct Denoted* get_denotation_prototype()
+ {
+ struct Denotation_Prototype *ret;
+ ret=malloc(sizeof(struct Denotation_Prototype));
+ ret->denotation=DT_Prototype;
+ ret->type=NULL;
+ ret->storage_class=SC_NONE;
+ ret->specifier=TS_NONE;
+ ret->constraint=TC_NONE;
+ ret->sign=TSIGN_NONE;
+ ret->function_specifier=FS_None;
+ ret->struct_union=NULL;
+ ret->enumerator=NULL;
+ ret->size=0;
+ ret->is_const=ret->is_volatile=0;
+
+ return (struct Denoted*)ret;
+ }
+ struct Denoted* extract_denoted(struct Denoted_Base *base,struct Denotation_Prototype *prototype,char allow_abstract)
+ {
+ if(base->type->specifier==TS_FUNC)
+ {
+ if(base->id==NULL && !allow_abstract)
+ {
+ return get_denoted_error(get_denoted_function(NULL,((struct Type_Function*)base->type)->return_type,prototype->function_specifier));
+ }else
+ {
+ return get_denoted_function(base->id,base->type,prototype->function_specifier);
+ }
+ }else if(prototype->storage_class==SC_TYPEDEF)
+ {
+ if(base->id==NULL && !allow_abstract)
+ {
+ return get_denoted_error(get_denoted_typedef(base));
+ }else
+ {
+ return get_denoted_typedef(base);
+ }
+ }else
+ {
+ if(base->id==NULL && !allow_abstract)
+ {
+ return get_denoted_error(get_denoted_object(base->id,prototype->storage_class,base->type));
+ }else
+ {
+ return get_denoted_object(base->id,prototype->storage_class,base->type);
+ }
+ }
+ }
+ #endif
F diff --git a/semantics/denoted.h b/semantics/denoted.h
new file mode 100644
--- /dev/null
+++ b/semantics/denoted.h
+ #ifndef GCC_DENOTED_H
+ #define GCC_DENOTED_H GCC_DENOTED_H
+ #include <denoted.hh>
+ #include <type.h>
+ #include <scope.h>
+ #include <semantics.h>
+
+
+ enum Denotation_Type;
+ enum Function_Specifier;
+ enum Storage_Class;
+
+
+ struct Denoted
+ {
+ enum Denotation_Type denotation;
+ };
+
+
+ struct Denoted_Error
+ {
+ enum Denotation_Type denotation;
+ struct Denoted *error;
+ };
+ struct Denoted_Base
+ {
+ enum Denotation_Type denotation;
+ struct token *id;
+ struct Type *type;
+ };
+ struct Denoted_Function
+ {
+ enum Denotation_Type denotation;
+ struct token *id;
+ struct Type *type;
+
+
+ enum Function_Specifier function_specifier;
+ struct AST_Compound_Statement *body;
+ };
+ struct Denoted_Object
+ {
+ enum Denotation_Type denotation;
+ struct token *id;
+
+ struct Object *object;
+ };
+ struct Denoted_Typedef
+ {
+ enum Denotation_Type denotation;
+ struct token *id;
+ struct Type *type;
+
+ };
+ struct Denoted_Enum
+ {
+ enum Denotation_Type denotation;
+ struct token *id;
+
+ struct Enum *enumeration;
+ };
+ struct Denoted_Enum_Const
+ {
+ enum Denotation_Type denotation;
+ struct token *id;
+
+ struct Enum *parent;
+ int value;
+ struct AST* expression;
+ };
+
+ struct Denoted_Struct_Union
+ {
+ enum Denotation_Type denotation;
+ struct token *id;
+
+ struct Struct_Union *struct_union;
+ };
+
+ struct Denotation_Prototype
+ {
+ enum Denotation_Type denotation;
+ struct Type *type;
+
+
+ enum Storage_Class storage_class;
+ enum Type_Specifier specifier;
+ enum Type_Constraint constraint;
+ enum Type_Signedness sign;
+ enum Function_Specifier function_specifier;
+
+ struct Struct_Union *struct_union;
+ struct Enum *enumerator;
+
+ size_t size;
+ char is_const:1;
+ char is_volatile:1;
+ };
+ struct Object
+ {
+ struct Type *type;
+ struct Location *location;
+ enum Storage_Class storage_class;
+ };
+
+
+
+
+ struct Denoted* get_denoted_error(struct Denoted *error);
+ struct Denoted* get_denoted_function(struct token *id,struct Type *return_type,enum Function_Specifier fs);
+ struct Denoted* get_denoted_object(struct token *id, enum Storage_Class sc,struct Type *type);
+ struct Denoted* get_denoted_typedef(struct Denoted_Base *base);
+ struct Denoted* get_denoted_enum_const_expr(struct token *id,struct Enum *parent,struct AST* expression);
+ struct Denoted* get_denoted_enum_const_num(struct token *id,struct Enum *parent,int value);
+ struct Denoted* get_denoted_enum(struct token *id,struct Enum *enumerator);
+ struct Denoted* get_denoted_struct_union(struct token *id,struct Struct_Union *struct_union);
+ struct Denoted* get_denoted_base(struct token *id,struct Type *type,enum Denotation_Type denotation);
+
+ struct Denoted* extract_denoted(struct Denoted_Base *base,struct Denotation_Prototype *prototype,char allow_abstract);
+ struct Denoted* get_denotation_prototype();
+ #endif
F diff --git a/semantics/denoted.hh b/semantics/denoted.hh
new file mode 100644
--- /dev/null
+++ b/semantics/denoted.hh
+ #ifndef GCC_DENOTED_HH
+ #define GCC_DENOTED_HH GCC_DENOTED_HH
+
+
+ enum Denotation_Type
+ {
+ DT_Macro,
+ DT_Macro_Parameter,
+ DT_Label,
+ DT_Object,
+ DT_Typedef,
+ DT_Function,
+ DT_Enum,
+ DT_Enum_Constant,
+ DT_Struct_Union_Member,
+ DT_Struct_Union_Tag,
+ DT_Error,
+ DT_Prototype
+ };
+
+ enum Function_Specifier
+ {
+ FS_Inline,
+ FS_None
+ };
+ enum Storage_Class
+ {
+ SC_EXTERN,
+ SC_STATIC,
+ SC_TYPEDEF,
+ SC_NONE
+ };
+
+ struct Denoted;
+ struct Denoted_Error;
+ struct Denoted_Base;
+ struct Denoted_Function;
+ struct Denoted_Object;
+ struct Denoted_Typedef;
+ struct Denoted_Enum;
+ struct Denoted_Enum_Const;
+ struct Denoted_Struct_Union;
+ struct Denotation_Prototype;
+ struct Object;
+
+
+ #endif
F diff --git a/semantics/location.c b/semantics/location.c
new file mode 100644
--- /dev/null
+++ b/semantics/location.c
+ #ifndef GCC_LOCATION_C
+ #define GCC_LOCATION_C GCC_LOCATION_C
+ #include "location.h"
+
+
+ struct Location_Stack* get_location_on_stack(size_t offset)
+ {
+ struct Location_Stack *ret;
+ ret=malloc(sizeof(struct Location_Stack));
+ ret->type=LT_ON_STACK;
+ ret->offset=offset;
+
+ return ret;
+ }
+ struct Location_Raw* get_location_raw(size_t address)
+ {
+ struct Location_Raw *ret;
+ ret=malloc(sizeof(struct Location_Raw));
+ ret->type=LT_RAW;
+ ret->address=address;
+
+ return ret;
+ }
+
+ struct Location_Relative* get_relative_location(struct Location *base,size_t offset)
+ {
+ struct Location_Relative *ret;
+ ret=malloc(sizeof(struct Location_Relative));
+ ret->type=LT_RELATIVE;
+ ret->base=base;
+ ret->offset=offset;
+
+ return ret;
+ }
+ /*base is modified*/
+ struct Location *get_location_for_denoted_object(struct Location *base,struct Type *type,struct token *id)
+ {
+ if(base->type==LT_ON_STACK)
+ {
+ struct Location_Stack *hold;
+ hold=malloc(sizeof(struct Location_Stack));
+ *hold=*(struct Location_Stack*)base;
+ ((struct Location_Stack*)base)->offset+=get_type_size(type);
+
+ return (struct Location*)hold;
+ }else if(base->type==LT_RELATIVE)
+ {
+ struct Location_Relative *hold;
+
+ hold=malloc(sizeof(struct Location_Relative));
+ *hold=*(struct Location_Relative*)base;
+
+ return (struct Location*)hold;
+ }else if(base->type==LT_GLOBAL)
+ {
+ struct Location_Labeled *hold;
+ hold=malloc(sizeof(struct Location_Labeled));
+ hold->id=id;
+
+ return (struct Location*)hold;
+ }
+ }
+ struct Location *get_global_location()
+ {
+ struct Location *ret;
+ ret=malloc(sizeof(struct Location));
+ ret->type=LT_GLOBAL;
+
+ return ret;
+ }
+ #endif
F diff --git a/semantics/location.h b/semantics/location.h
new file mode 100644
--- /dev/null
+++ b/semantics/location.h
+ #ifndef GCC_LOCATION_H
+ #define GCC_LOCATION_H GCC_LOCATION_H
+ #include <location.hh>
+ #include <lexer.h>
+ #include <type.h>
+
+
+ enum Location_Type;
+ struct Location
+ {
+ enum Location_Type type;
+ };
+ struct Location_Stack
+ {
+ enum Location_Type type;
+ size_t offset;
+ };
+ struct Location_Raw
+ {
+ enum Location_Type type;
+ size_t address;
+ };
+
+ struct Location_Relative
+ {
+ enum Location_Type type;
+ struct Location *base;
+ size_t offset;
+ };
+
+ struct Location_Labeled
+ {
+ enum Location_Type type;
+ struct token *id;
+ };
+
+ struct Location_Stack* get_location_on_stack(size_t offset);
+ struct Location* get_global_location();
+ struct Location_Raw* get_location_raw(size_t address);
+ struct Location_Relative* get_relative_location(struct Location *base,size_t offset);
+ struct Location* get_location_for_denoted_object(struct Location *base,struct Type *type,struct token *id);
+
+ #endif
F diff --git a/semantics/location.hh b/semantics/location.hh
new file mode 100644
--- /dev/null
+++ b/semantics/location.hh
+ #ifndef GCC_LOCATION_HH
+ #define GCC_LOCATION_HH GCC_LOCATION_HH
+ enum Location_Type
+ {
+ LT_ON_STACK,
+ LT_RAW,
+ LT_RELATIVE,
+ LT_LABELED,
+ LT_GLOBAL
+ };
+ struct Location;
+ struct Location_Stack;
+ struct Location_Raw;
+ struct Location_Relative;
+ struct Location_Labeled;
+
+ #endif
F diff --git a/semantics/program.c b/semantics/program.c
new file mode 100644
--- /dev/null
+++ b/semantics/program.c
+ #ifndef GCC_PROGRAM_C
+ #define GCC_PROGRAM_C GCC_PROGRAM_C
+ #/*Don't mind me*/include/*When I grow up I want to be a new line*/"program.h"
+ #include"parse_translation_unit.h"
+
+
+ struct Program* get_program()
+ {
+ struct Program *ret;
+ ret=malloc(sizeof(struct Program));
+ Queue_Init(&ret->translation_units_tokens);
+ Queue_Init(&ret->source_files);
+ Map_Init(&ret->defines);
+ ret->global_scope=get_scope(NULL);
+
+ ret->number_of_translation_units=0;
+ ret->translation_units=NULL;
+
+ return ret;
+ }
+ struct Source_File* get_source_file(char *name_of_file)
+ {
+ FILE *in;
+ size_t file_size;
+ struct Source_File *src;
+
+ in=fopen(name_of_file,"r");
+ if(in==NULL)
+ {
+ /*error*/
+ return NULL;
+ }
+
+ fseek(in,0,SEEK_END);
+ file_size=ftell(in);
+ rewind(in);
+
+ src=malloc(sizeof(struct Source_File));
+ src->src_name=name_of_file;
+ src->src=malloc(file_size+1);
+ src->src_size=file_size;
+ src->where_in_src=0;
+ src->which_column=0;
+ src->which_row=0;
+ src->src[file_size]='\0';
+
+ fread(src->src,1,file_size,in);
+ fclose(in);
+ return src;
+ }
+ struct Queue* lex_source_file(char *name_of_file,struct Program* program)
+ {
+ struct Source_File *src;
+ src=get_source_file(name_of_file);
+
+ Queue_Push(&program->translation_units_tokens,lex(src,program));
+ Queue_Push(&program->source_files,src);
+ }
+ void lex_program(char *name_of_file,struct Program *program)
+ {
+ lex_source_file(name_of_file,program);
+ }
+
+ void parse_program(struct Program *program)
+ {
+ size_t i;
+ program->translation_units=malloc(sizeof(struct AST*) * program->translation_units_tokens.size);
+ program->number_of_translation_units=program->translation_units_tokens.size;
+ for(i=0;i<program->number_of_translation_units;++i)
+ {
+ program->translation_units[i]=parse_translation_unit(
+ Queue_Pop(&program->translation_units_tokens),
+ program->global_scope
+ );
+ }
+ }
+ #endif
F diff --git a/semantics/program.h b/semantics/program.h
new file mode 100644
--- /dev/null
+++ b/semantics/program.h
+ #ifndef GCC_PROGRAM_H
+ #define GCC_PROGRAM_H GCC_PROGRAM_H
+ #include <program.hh>
+ #include <queue.h>
+ #include <scope.h>
+ #include <lexer.h>
+
+ struct Source_File
+ {
+ char *src;
+ char *src_name;
+ size_t src_size;
+
+ size_t where_in_src;
+ size_t which_column;
+ size_t which_row;
+ };
+
+
+ struct Program
+ {
+
+ struct Queue translation_units_tokens;
+ struct Queue source_files;
+ struct Map defines;
+
+ size_t number_of_translation_units;
+ struct AST **translation_units;
+
+ struct Scope *global_scope;
+ };
+
+ struct Program* get_program();
+ struct Source_File* get_source_file(char *name_of_file);
+ struct Queue* lex_source_file(char *name_of_file,struct Program *program);
+ void lex_program(char *name_of_file,struct Program *program);
+ void parse_program(struct Program *program);
+
+
+ #endif
F diff --git a/semantics/program.hh b/semantics/program.hh
new file mode 100644
--- /dev/null
+++ b/semantics/program.hh
+ #ifndef GCC_PROGRAM_HH
+ #define GCC_PROGRAM_HH GCC_PROGRAM_HH
+
+ struct Source_File;
+ struct Program;
+
+
+ #endif
F diff --git a/semantics/scope.c b/semantics/scope.c
new file mode 100644
--- /dev/null
+++ b/semantics/scope.c
+ #ifndef GCC_SCOPE_C
+ #define GCC_SCOPE_C GCC_SCOPE_C
+ #include "scope.h"
+
+
+ struct Scope* get_scope(struct Scope *parent)
+ {
+ struct Scope *ret;
+ ret=malloc(sizeof(struct Scope));
+ Map_Init(&ret->labels);
+ Map_Init(&ret->tags);
+ Map_Init(&ret->ordinary);
+ ret->parent=parent;
+ if(parent==NULL)
+ {
+ ret->location=get_global_location();
+ }else
+ {
+ ret->location=(struct Location*)get_relative_location(parent->location,0);
+ }
+ return ret;
+ }
+
+ void* check_label(struct Scope *current,struct token *id)
+ {
+ void *hold;
+ hold=NULL;
+ while(current!=NULL && hold==NULL)
+ {
+ hold=Map_Check(¤t->labels,id->data,id->data_size);
+ current=current->parent;
+ }
+ return hold;
+ }
+
+ struct Denoted* check_tag(struct Scope *current,struct token *id)
+ {
+ void *hold;
+ hold=NULL;
+ while(current!=NULL && hold==NULL)
+ {
+ hold=Map_Check(¤t->tags,id->data,id->data_size);
+ current=current->parent;
+ }
+ return hold;
+ }
+ void* check_ordinary(struct Scope *current,struct token *id)
+ {
+ void *hold;
+ hold=NULL;
+ while(current!=NULL && hold==NULL)
+ {
+ hold=Map_Check(¤t->ordinary,id->data,id->data_size);
+ current=current->parent;
+ }
+ return hold;
+ }
+
+ void Scope_Push(struct Scope *scope,struct Denoted *declarator)
+ {
+ switch(declarator->denotation)
+ {
+ /*
+ case DT_Label:
+ if(check_label(scope,((struct Denoted_Object
+ return 1;
+ */
+ case DT_Function:
+ case DT_Typedef:
+ case DT_Object:
+ case DT_Enum_Constant:
+ case DT_Struct_Union_Member:
+ push_ordinary(scope,((struct Denoted_Object*)declarator)->id,declarator);
+ return;
+ case DT_Enum:
+ case DT_Struct_Union_Tag:
+ push_tag(scope,((struct Denoted_Object*)declarator)->id,declarator);
+ return;
+ }
+ }
+ char check_if_typedefed(struct Scope* scope,struct token *id)
+ {
+ struct Denoted *hold;
+ hold=check_ordinary(scope,id);
+ if(hold==NULL || hold->denotation!=DT_Typedef)
+ return 0;
+ else
+ return 1;
+
+ }
+ void push_tag(struct Scope *current,struct token *id,struct Denoted *denot)
+ {
+ Map_Push(¤t->tags,id->data,id->data_size,denot);
+ }
+ void push_ordinary(struct Scope *current,struct token *id,struct Denoted *denot)
+ {
+ Map_Push(¤t->ordinary,id->data,id->data_size,denot);
+ }
+ #endif
F diff --git a/semantics/scope.h b/semantics/scope.h
new file mode 100644
--- /dev/null
+++ b/semantics/scope.h
+ #ifndef GCC_SCOPE_H
+ #define GCC_SCOPE_H GCC_SCOPE_H
+ #include <scope.hh>
+ #include <map.h>
+ #include <denoted.h>
+ #include <location.h>
+
+ struct Scope
+ {
+ Map labels;
+
+ Map tags;
+ /*In go denoted*/
+ Map ordinary;
+
+ struct Scope *parent;
+ struct Location *location;
+ };
+
+
+ struct Scope* get_scope(struct Scope *parent);
+
+ void* check_label(struct Scope *current,struct token *id);
+
+ void push_label(struct Scope *current,struct token *id);/*TODO*/
+
+ struct Denoted* check_tag(struct Scope *current,struct token *id);
+ void push_tag(struct Scope *current,struct token *id,struct Denoted *denot);
+
+ void* check_ordinary(struct Scope *current,struct token *id);
+ void push_ordinary(struct Scope *current,struct token *id,struct Denoted *denot);
+
+ void Scope_Push(struct Scope *scope,struct Denoted *declarator);
+ char check_if_typedefed(struct Scope* scope,struct token *id);
+ #endif
F diff --git a/semantics/scope.hh b/semantics/scope.hh
new file mode 100644
--- /dev/null
+++ b/semantics/scope.hh
+ #ifndef GCC_SCOPE_HH
+ #define GCC_SCOPE_HH GCC_SCOPE_HH
+
+ struct Scope;
+
+ #endif
F diff --git a/semantics/semantics.c b/semantics/semantics.c
new file mode 100644
--- /dev/null
+++ b/semantics/semantics.c
+ #ifndef GCC_SEMANTICS_C
+ #define GCC_SEMANTICS_C GCC_SEMANTICS_C
+ #include"semantics.h"
+
+
+
+ long long int evaluate_const_expression_integer(struct AST *expression)
+ {
+ switch(expression->type)
+ {
+ case OP_ADDITION:
+ return
+ evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->left)
+ +
+ evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->right);
+ break;
+ case OP_SUBTRACTION:
+ return
+ evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->left)
+ -
+ evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->right);
+ break;
+ case OP_DIV:
+ return
+ evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->left)
+ /
+ evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->right);
+ break;
+ case OP_MUL:
+ return
+ evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->left)
+ *
+ evaluate_const_expression_integer(BIN_EXPR_PTR(expression)->right);
+ break;
+ case OP_RVALUE:
+ if(RVAL_EXPR_PTR(expression)->id->type==KW_NUMBER)
+ {
+ return evaluate_literal_integer_dec(RVAL_EXPR_PTR(expression)->id);
+ }
+ break;
+ }
+ /*shouldnt reach here*/
+ return 0;
+
+ }
+
+ long long int evaluate_literal_integer_dec(struct token *token)
+ {
+ long long int accumulate=0;
+ size_t i;
+ for(i=0;i<token->data_size;++i)
+ {
+ accumulate*=10;
+ accumulate+=token->data[i]-'0';
+ }
+ return accumulate;
+
+ }
+
+
+ #endif
F diff --git a/semantics/semantics.h b/semantics/semantics.h
new file mode 100644
--- /dev/null
+++ b/semantics/semantics.h
+ #ifndef GCC_SEMANTICS_H
+ #define GCC_SEMANTICS_H GCC_SEMANTICS_H
+ #include <ast.h>
+ #include <lexer.h>
+
+ long long int evaluate_const_expression_integer(struct AST *expression);
+ long long int evaluate_literal_integer_dec(struct token *token);
+ #endif
F diff --git a/semantics/type.c b/semantics/type.c
new file mode 100644
--- /dev/null
+++ b/semantics/type.c
+ #ifndef GCC_TYPE_C
+ #define GCC_TYPE_C GCC_TYPE_C
+ #include "type.h"
+
+
+
+ struct Type* get_type_error(struct Type* error)
+ {
+ struct Type_Error *ret;
+ ret=malloc(sizeof(struct Type_Error));
+ ret->specifier=TS_ERROR;
+ ret->error=error;
+
+ return (struct Type*)ret;
+ }
+ /*could return error */
+ struct Type* get_struct_union_type(struct Denotation_Prototype *prototype)
+ {
+ struct Type_Struct_Union *ret;
+
+ ret=malloc(sizeof(struct Type_Struct_Union));
+ ret->specifier=prototype->specifier;
+ ret->struct_union=prototype->struct_union;
+
+ ret->is_const=prototype->is_const;
+ ret->is_volatile=prototype->is_volatile;
+
+ if(prototype->constraint!=TC_NONE || prototype->sign!=TSIGN_NONE || (prototype->specifier!=TS_UNION && prototype->specifier!=TS_STRUCT))
+ {
+ return (struct Type*)get_type_error((struct Type*)ret);
+ }else
+ {
+ return (struct Type*)ret;
+ }
+ }
+ struct Struct_Union* get_struct_union_base(struct Scope *scope ,enum Type_Specifier struct_or_union)
+ {
+ struct Struct_Union *ret;
+ ret=malloc(sizeof(struct Struct_Union));
+ ret->specifier=struct_or_union;
+ ret->members=malloc(sizeof(struct Queue));
+ Queue_Init(ret->members);
+
+ ret->inner_namespace=get_scope(scope);
+ ret->is_finished=0;
+
+ return ret;
+ }
+ struct Enum *get_enum_base()
+ {
+ struct Enum *ret;
+ ret=malloc(sizeof(struct Enum));
+ ret->specifier=TS_ENUM;
+ ret->consts=malloc(sizeof(struct Queue));
+ Queue_Init(ret->consts);
+
+ ret->is_finished=0;
+
+ return ret;
+ }
+ /*could return error*/
+ struct Type* get_basic_type(struct Denotation_Prototype *prototype)
+ {
+ struct Type_Basic *ret;
+ ret=malloc(sizeof(struct Type_Basic));
+
+ ret->size=prototype->size;
+ ret->is_const=prototype->is_const;
+ ret->is_volatile=prototype->is_volatile;
+ ret->constraint=prototype->constraint;
+ ret->size=prototype->sign;
+
+
+ if(prototype->specifier==TS_NONE)
+ {
+ ret->specifier=TS_INT;
+ }else
+ {
+ ret->specifier=prototype->specifier;
+
+ }
+
+ switch(prototype->specifier)
+ {
+ case TS_DOUBLE:
+ if(prototype->constraint==TC_LONG_LONG
+ || prototype->constraint==TC_SHORT
+ || prototype->sign!=TSIGN_NONE)
+ {
+ return (struct Type*)get_type_error((struct Type*)ret);
+ }
+ break;
+ case TS_CHAR:
+ if(prototype->constraint!=TC_NONE)
+ {
+ return (struct Type*)get_type_error((struct Type*)ret);
+ }
+ break;
+ case TS_INT:
+ break;
+ default:
+ if(prototype->constraint!=TC_NONE || prototype->sign!=TSIGN_NONE)
+ {
+ return (struct Type*)get_type_error((struct Type*)ret);
+ }
+
+ }
+ return (struct Type*)ret;
+
+ }
+ struct Type* get_pointer_type(struct Type* points_to)
+ {
+ struct Type_Pointer *ret;
+ ret=malloc(sizeof(struct Type_Pointer));
+ ret->specifier=TS_POINTER;
+ ret->size=PTR_SIZE;
+ ret->points_to=points_to;
+ ret->is_const=ret->is_volatile=0;
+ return (struct Type*)ret;
+
+ }
+ struct Type* get_array_type(struct Type *is_array_of,struct AST* number_of_elements)
+ {
+ struct Type_Array *ret;
+ ret=malloc(sizeof(struct Type_Array));
+ ret->specifier=TS_ARRAY;
+ ret->size=0;
+ ret->number_of_elements=evaluate_const_expression_integer(number_of_elements);
+ ret->expression=number_of_elements;
+ ret->is_array_of=is_array_of;
+
+ return (struct Type*)ret;
+ }
+ struct Type* get_enum_type(struct Denotation_Prototype *prototype)
+ {
+ struct Type_Enum *ret;
+ ret=malloc(sizeof(struct Type_Enum));
+ ret->specifier=TS_ENUM;
+ ret->enumeration=prototype->enumerator;
+ ret->is_const=prototype->is_const;
+ ret->is_volatile=prototype->is_volatile;
+ if(prototype->sign!=TSIGN_NONE || prototype->constraint!=TC_NONE)
+ {
+ return get_type_error((struct Type*)ret);
+ }
+ return (struct Type*)ret;
+ }
+ struct Type* get_type_bitfield(struct Type* base,struct AST* number_of_bits)
+ {
+ struct Type_Bit_Field *ret;
+ ret=malloc(sizeof(struct Type_Bit_Field));
+ ret->specifier=TS_BITFIELD;
+ ret->expression=number_of_bits;
+ ret->number_of_bits=evaluate_const_expression_integer(number_of_bits);
+ ret->base=base;
+
+ return (struct Type*)ret;
+ }
+ struct Type* get_function_type(struct Type* return_type,struct Queue *parameters,struct Scope* function_prototype_scope)
+ {
+ struct Type_Function *ret;
+ ret=malloc(sizeof(struct Type_Function));
+ ret->specifier=TS_FUNC;
+ ret->return_type=return_type;
+ ret->parameters=parameters;
+ ret->function_prototype_scope=function_prototype_scope;
+
+ return (struct Type*)ret;
+ }
+ char is_type(struct Queue *tokens,struct Scope *scope)
+ {
+ struct token *hold;
+ struct Denoted *thing;
+
+ hold=tokens->first->data;
+
+ switch(hold->type)
+ {
+ case KW_ID:
+ thing=check_ordinary(scope,hold);
+ if(thing!=NULL && thing->denotation==DT_Typedef)
+ return 1;
+ else return 0;
+ case KW_CONST:
+ case KW_VOLATILE:
+ case KW_INT:
+ case KW_VOID:
+ case KW_CHAR:
+ case KW_DOUBLE:
+ case KW_FLOAT:
+ case KW_LONG:
+ case KW_SHORT:
+ case KW_EXTERN:
+ case KW_STATIC:
+ case KW_TYPEDEF:
+ case KW_STRUCT:
+ case KW_UNION:
+ case KW_ENUM:
+ return 1;
+ default:
+ return 0;
+
+ }
+ }
+ size_t get_type_size(struct Type *type)
+ {
+ switch(type->specifier)
+ {
+ case TS_VOID:
+ return 0;
+ case TS_CHAR:
+ return 1;
+ case TS_INT:
+ return INT_SIZE;
+ case TS_FLOAT:
+ return FLOAT_SIZE;
+ case TS_DOUBLE:
+ return FLOAT_SIZE*2;
+ case TS_STRUCT:
+ return ((struct Type_Struct_Union*)type)->struct_union->size;
+ case TS_ENUM:
+ return INT_SIZE;
+ case TS_UNION:
+ return ((struct Type_Struct_Union*)type)->struct_union->size;
+ case TS_POINTER:
+ return PTR_SIZE;
+ case TS_ARRAY:
+ return ((struct Type_Array*)type)->size;
+ case TS_FUNC:
+ return 0;
+ case TS_BITFIELD:
+ return ((struct Type_Bit_Field*)type)->number_of_bits;
+ case TS_NONE:
+ return 0;
+ case TS_ERROR:
+ return 0;
+
+ }
+ }
+ #endif
F diff --git a/semantics/type.h b/semantics/type.h
new file mode 100644
--- /dev/null
+++ b/semantics/type.h
+ #ifndef GCC_TYPE_H
+ #define GCC_TYPE_H GCC_TYPE_H
+ #include <type.hh>
+ #include <denoted.h>
+ #include <scope.h>
+ #include <limits.h>
+
+ #define PTR_SIZE 4
+
+ #define INT_SIZE 4
+
+ #define CHAR_SIZE 1
+
+ #define FLOAT_SIZE 4
+ #define DOUBLE_SIZE 8
+
+
+
+
+
+ enum Type_Specifier;
+ enum Type_Constraint;
+ enum Type_Signedness;
+
+ struct Type
+ {
+ enum Type_Specifier specifier;
+ };
+ struct Type_Error
+ {
+ enum Type_Specifier specifier;
+ struct Type *error;
+ };
+
+ struct Type_Struct_Union
+ {
+ enum Type_Specifier specifier;
+ struct Struct_Union *struct_union;
+
+ char is_const:1;
+ char is_volatile:1;
+ };
+ struct Struct_Union
+ {
+ enum Type_Specifier specifier;
+ size_t size;
+ struct Queue *members;
+ struct Scope *inner_namespace;
+
+ char is_finished;
+ };
+ struct Type_Bit_Field
+ {
+ enum Type_Specifier specifier;
+ size_t number_of_bits;
+ struct Type *base;
+ struct AST *expression;
+ };
+ struct Type_Basic
+ {
+ enum Type_Specifier specifier;
+ enum Type_Constraint constraint;
+ enum Type_Signedness sign;
+ size_t size;
+ char is_const:1;
+ char is_volatile:1;
+ char is_signed:1;
+ };
+ struct Type_Pointer
+ {
+ enum Type_Specifier specifier;
+ size_t size;
+ struct Type *points_to;
+ char is_const:1;
+ char is_volatile:1;
+ };
+ struct Type_Array
+ {
+ enum Type_Specifier specifier;
+ size_t size;
+ size_t number_of_elements;
+ struct Type *is_array_of;
+
+ struct AST *expression;
+ };
+ struct Type_Function
+ {
+ enum Type_Specifier specifier;
+ struct Type *return_type;
+ struct Queue *parameters;
+ struct Scope *function_prototype_scope;
+
+ };
+ struct Type_Enum
+ {
+ enum Type_Specifier specifier;
+ struct Enum *enumeration;
+
+ char is_const:1;
+ char is_volatile:1;
+
+ };
+ struct Enum
+ {
+ enum Type_Specifier specifier;
+ struct Queue *consts;
+ char is_finished;
+ };
+
+ struct Type* get_type_error(struct Type* error);
+ struct Type* get_struct_union_type(struct Denotation_Prototype *prototype);
+ struct Struct_Union* get_struct_union_base(struct Scope *scope ,enum Type_Specifier struct_or_union);
+ struct Enum *get_enum_base();
+ struct Type* get_basic_type(struct Denotation_Prototype *prototype);
+ struct Type* get_pointer_type(struct Type* points_to);
+ struct Type* get_array_type(struct Type *is_array_of,struct AST* number_of_elements);
+ struct Type* get_enum_type(struct Denotation_Prototype *prototype);
+ struct Type* get_type_bitfield(struct Type* base,struct AST* number_of_bits);
+ struct Type* get_function_type(struct Type* return_type,struct Queue *parameters,struct Scope* function_prototype_scope);
+ char is_type(struct Queue *tokens,struct Scope *scope);
+ size_t get_type_size(struct Type *type);
+
+
+
+ #endif
F diff --git a/semantics/type.hh b/semantics/type.hh
new file mode 100644
--- /dev/null
+++ b/semantics/type.hh
+ #ifndef GCC_TYPE_HH
+ #define GCC_TYPE_HH GCC_TYPE_HH
+
+
+ /*this isn't just type-specifier :DD*/
+ enum Type_Specifier
+ {
+ TS_VOID,
+ TS_CHAR,
+ TS_INT,
+ TS_FLOAT,
+ TS_DOUBLE,
+ TS_STRUCT,
+ TS_ENUM,
+ TS_UNION,
+ TS_POINTER,
+ TS_ARRAY,
+ TS_FUNC,
+ TS_BITFIELD,
+ TS_NONE,
+ TS_ERROR
+ };
+ enum Type_Constraint
+ {
+ TC_LONG,
+ TC_LONG_LONG,
+ TC_SHORT,
+ TC_NONE
+ };
+ enum Type_Signedness
+ {
+ TSIGN_SIGNED,
+ TSIGN_UNSIGNED,
+ TSIGN_NONE
+ };
+ struct Type;
+ struct Type_Error;
+ struct Type_Struct_Union;
+ struct Struct_Union;
+ struct Type_Bit_Field;
+ struct Type_Basic;
+ struct Type_Pointer;
+ struct Type_Array;
+ struct Type_Function;
+ struct Type_Enum;
+ struct Enum;
+ #endif
F diff --git a/stack.c b/stack.c
deleted file mode 100644
--- a/stack.c
+++ /dev/null
- #ifndef GSTACK_C
- #define GSTACK_C GSTACK_C
- #include "stack.h"
-
-
-
- void Stack_Init(Stack *stack)
- {
- stack->size=0;
- stack->first=NULL;
- }
- void Stack_Push(Stack *stack,void* data)
- {
- struct Stack_Node *temp_node=malloc(sizeof(struct Stack_Node));
- temp_node->data=data;
- temp_node->next=stack->first;
- stack->first=temp_node;
- ++stack->size;
- }
- void* Stack_Pop(Stack *stack)
- {
- void* return_value=NULL;
- if(stack->first!=NULL)
- {
- struct Stack_Node *temp_first=stack->first;
- return_value=stack->first->data;
-
- --stack->size;
- stack->first=stack->first->next;
- free(temp_first);
- }
-
- return return_value;
- }
-
- #endif//#ifndef GSTACK_C
-
F diff --git a/stack.h b/stack.h
deleted file mode 100644
--- a/stack.h
+++ /dev/null
- #ifndef GSTACK_H
- #define GSTACK_H GSTACK_H
- #include<stdlib.h>//malloc free et alii
- typedef struct Stack Stack;
-
- struct Stack
- {
- struct Stack_Node
- {
- struct Stack_Node *next;
- void *data;
- }*first;
- size_t size;
- };
-
- void Stack_Init(Stack *stack);
- void Stack_Push(Stack *stack,void* data);
- void* Stack_Pop(Stack *stack);
-
-
- #endif
F diff --git a/test.c b/test.c
deleted file mode 100644
--- a/test.c
+++ /dev/null
- #include "test2.c"
- List ints;
- int main()
- {
-
- long int c;
- int a,b;
-
- c=a+b;
- return 0;
- }
F diff --git a/test2.c b/test2.c
deleted file mode 100644
--- a/test2.c
+++ /dev/null
- int/*kek*/kek;
- struct ke
- {
- int s;
- };
- typedef int List;
F diff --git a/tests/test.c b/tests/test.c
new file mode 100644
--- /dev/null
+++ b/tests/test.c
+ #include "test2.c"
+ List ints;
+ int main()
+ {
+
+ long int c;
+ int a,b;
+
+ c=a+b;
+ return 0;
+ }
F diff --git a/tests/test2.c b/tests/test2.c
new file mode 100644
--- /dev/null
+++ b/tests/test2.c
+ int/*kek*/kek;
+ struct ke
+ {
+ int s;
+ };
+ typedef int List;
F diff --git a/type.c b/type.c
deleted file mode 100644
--- a/type.c
+++ /dev/null
- #ifndef GCC_TYPE_C
- #define GCC_TYPE_C GCC_TYPE_C
- #include "type.h"
-
-
-
- struct Type* get_type_error(struct Type* error)
- {
- struct Type_Error *ret;
- ret=malloc(sizeof(struct Type_Error));
- ret->specifier=TS_ERROR;
- ret->error=error;
-
- return (struct Type*)ret;
- }
- /*could return error */
- struct Type* get_struct_union_type(struct Denotation_Prototype *prototype)
- {
- struct Type_Struct_Union *ret;
-
- ret=malloc(sizeof(struct Type_Struct_Union));
- ret->specifier=prototype->specifier;
- ret->struct_union=prototype->struct_union;
-
- ret->is_const=prototype->is_const;
- ret->is_volatile=prototype->is_volatile;
-
- if(prototype->constraint!=TC_NONE || prototype->sign!=TSIGN_NONE || (prototype->specifier!=TS_UNION && prototype->specifier!=TS_STRUCT))
- {
- return (struct Type*)get_type_error((struct Type*)ret);
- }else
- {
- return (struct Type*)ret;
- }
- }
- struct Struct_Union* get_struct_union_base(struct Scope *scope ,enum Type_Specifier struct_or_union)
- {
- struct Struct_Union *ret;
- ret=malloc(sizeof(struct Struct_Union));
- ret->specifier=struct_or_union;
- ret->members=malloc(sizeof(struct Queue));
- Queue_Init(ret->members);
-
- ret->inner_namespace=get_scope(scope);
- ret->is_finished=0;
-
- return ret;
- }
- struct Enum *get_enum_base()
- {
- struct Enum *ret;
- ret=malloc(sizeof(struct Enum));
- ret->specifier=TS_ENUM;
- ret->consts=malloc(sizeof(struct Queue));
- Queue_Init(ret->consts);
-
- ret->is_finished=0;
-
- return ret;
- }
- /*could return error*/
- struct Type* get_basic_type(struct Denotation_Prototype *prototype)
- {
- struct Type_Basic *ret;
- ret=malloc(sizeof(struct Type_Basic));
-
- ret->size=prototype->size;
- ret->is_const=prototype->is_const;
- ret->is_volatile=prototype->is_volatile;
- ret->constraint=prototype->constraint;
- ret->size=prototype->sign;
-
-
- if(prototype->specifier==TS_NONE)
- {
- ret->specifier=TS_INT;
- }else
- {
- ret->specifier=prototype->specifier;
-
- }
-
- switch(prototype->specifier)
- {
- case TS_DOUBLE:
- if(prototype->constraint==TC_LONG_LONG
- || prototype->constraint==TC_SHORT
- || prototype->sign!=TSIGN_NONE)
- {
- return (struct Type*)get_type_error((struct Type*)ret);
- }
- break;
- case TS_CHAR:
- if(prototype->constraint!=TC_NONE)
- {
- return (struct Type*)get_type_error((struct Type*)ret);
- }
- break;
- case TS_INT:
- break;
- default:
- if(prototype->constraint!=TC_NONE || prototype->sign!=TSIGN_NONE)
- {
- return (struct Type*)get_type_error((struct Type*)ret);
- }
-
- }
- return (struct Type*)ret;
-
- }
- struct Type* get_pointer_type(struct Type* points_to)
- {
- struct Type_Pointer *ret;
- ret=malloc(sizeof(struct Type_Pointer));
- ret->specifier=TS_POINTER;
- ret->size=PTR_SIZE;
- ret->points_to=points_to;
- ret->is_const=ret->is_volatile=0;
- return (struct Type*)ret;
-
- }
- struct Type* get_array_type(struct Type *is_array_of,struct AST* number_of_elements)
- {
- struct Type_Array *ret;
- ret=malloc(sizeof(struct Type_Array));
- ret->specifier=TS_ARRAY;
- ret->size=0;
- ret->number_of_elements=evaluate_const_expression_integer(number_of_elements);
- ret->expression=number_of_elements;
- ret->is_array_of=is_array_of;
-
- return (struct Type*)ret;
- }
- struct Type* get_enum_type(struct Denotation_Prototype *prototype)
- {
- struct Type_Enum *ret;
- ret=malloc(sizeof(struct Type_Enum));
- ret->specifier=TS_ENUM;
- ret->enumeration=prototype->enumerator;
- ret->is_const=prototype->is_const;
- ret->is_volatile=prototype->is_volatile;
- if(prototype->sign!=TSIGN_NONE || prototype->constraint!=TC_NONE)
- {
- return get_type_error((struct Type*)ret);
- }
- return (struct Type*)ret;
- }
- struct Type* get_type_bitfield(struct Type* base,struct AST* number_of_bits)
- {
- struct Type_Bit_Field *ret;
- ret=malloc(sizeof(struct Type_Bit_Field));
- ret->specifier=TS_BITFIELD;
- ret->expression=number_of_bits;
- ret->number_of_bits=evaluate_const_expression_integer(number_of_bits);
- ret->base=base;
-
- return (struct Type*)ret;
- }
- struct Type* get_function_type(struct Type* return_type,struct Queue *parameters,struct Scope* function_prototype_scope)
- {
- struct Type_Function *ret;
- ret=malloc(sizeof(struct Type_Function));
- ret->specifier=TS_FUNC;
- ret->return_type=return_type;
- ret->parameters=parameters;
- ret->function_prototype_scope=function_prototype_scope;
-
- return (struct Type*)ret;
- }
- char is_type(struct Queue *tokens,struct Scope *scope)
- {
- struct token *hold;
- struct Denoted *thing;
-
- hold=tokens->first->data;
-
- switch(hold->type)
- {
- case KW_ID:
- thing=check_ordinary(scope,hold);
- if(thing!=NULL && thing->denotation==DT_Typedef)
- return 1;
- else return 0;
- case KW_CONST:
- case KW_VOLATILE:
- case KW_INT:
- case KW_VOID:
- case KW_CHAR:
- case KW_DOUBLE:
- case KW_FLOAT:
- case KW_LONG:
- case KW_SHORT:
- case KW_EXTERN:
- case KW_STATIC:
- case KW_TYPEDEF:
- case KW_STRUCT:
- case KW_UNION:
- case KW_ENUM:
- return 1;
- default:
- return 0;
-
- }
- }
- size_t get_type_size(struct Type *type)
- {
- switch(type->specifier)
- {
- case TS_VOID:
- return 0;
- case TS_CHAR:
- return 1;
- case TS_INT:
- return INT_SIZE;
- case TS_FLOAT:
- return FLOAT_SIZE;
- case TS_DOUBLE:
- return FLOAT_SIZE*2;
- case TS_STRUCT:
- return ((struct Type_Struct_Union*)type)->struct_union->size;
- case TS_ENUM:
- return INT_SIZE;
- case TS_UNION:
- return ((struct Type_Struct_Union*)type)->struct_union->size;
- case TS_POINTER:
- return PTR_SIZE;
- case TS_ARRAY:
- return ((struct Type_Array*)type)->size;
- case TS_FUNC:
- return 0;
- case TS_BITFIELD:
- return ((struct Type_Bit_Field*)type)->number_of_bits;
- case TS_NONE:
- return 0;
- case TS_ERROR:
- return 0;
-
- }
- }
- #endif
F diff --git a/type.h b/type.h
deleted file mode 100644
--- a/type.h
+++ /dev/null
- #ifndef GCC_TYPE_H
- #define GCC_TYPE_H GCC_TYPE_H
- #include "type.hh"
- #include "denoted.h"
- #include "scope.h"
- #include <limits.h>
-
- #define PTR_SIZE 4
-
- #define INT_SIZE 4
-
- #define CHAR_SIZE 1
-
- #define FLOAT_SIZE 4
- #define DOUBLE_SIZE 8
-
-
-
-
-
- enum Type_Specifier;
- enum Type_Constraint;
- enum Type_Signedness;
-
- struct Type
- {
- enum Type_Specifier specifier;
- };
- struct Type_Error
- {
- enum Type_Specifier specifier;
- struct Type *error;
- };
-
- struct Type_Struct_Union
- {
- enum Type_Specifier specifier;
- struct Struct_Union *struct_union;
-
- char is_const:1;
- char is_volatile:1;
- };
- struct Struct_Union
- {
- enum Type_Specifier specifier;
- size_t size;
- struct Queue *members;
- struct Scope *inner_namespace;
-
- char is_finished;
- };
- struct Type_Bit_Field
- {
- enum Type_Specifier specifier;
- size_t number_of_bits;
- struct Type *base;
- struct AST *expression;
- };
- struct Type_Basic
- {
- enum Type_Specifier specifier;
- enum Type_Constraint constraint;
- enum Type_Signedness sign;
- size_t size;
- char is_const:1;
- char is_volatile:1;
- char is_signed:1;
- };
- struct Type_Pointer
- {
- enum Type_Specifier specifier;
- size_t size;
- struct Type *points_to;
- char is_const:1;
- char is_volatile:1;
- };
- struct Type_Array
- {
- enum Type_Specifier specifier;
- size_t size;
- size_t number_of_elements;
- struct Type *is_array_of;
-
- struct AST *expression;
- };
- struct Type_Function
- {
- enum Type_Specifier specifier;
- struct Type *return_type;
- struct Queue *parameters;
- struct Scope *function_prototype_scope;
-
- };
- struct Type_Enum
- {
- enum Type_Specifier specifier;
- struct Enum *enumeration;
-
- char is_const:1;
- char is_volatile:1;
-
- };
- struct Enum
- {
- enum Type_Specifier specifier;
- struct Queue *consts;
- char is_finished;
- };
-
- struct Type* get_type_error(struct Type* error);
- struct Type* get_struct_union_type(struct Denotation_Prototype *prototype);
- struct Struct_Union* get_struct_union_base(struct Scope *scope ,enum Type_Specifier struct_or_union);
- struct Enum *get_enum_base();
- struct Type* get_basic_type(struct Denotation_Prototype *prototype);
- struct Type* get_pointer_type(struct Type* points_to);
- struct Type* get_array_type(struct Type *is_array_of,struct AST* number_of_elements);
- struct Type* get_enum_type(struct Denotation_Prototype *prototype);
- struct Type* get_type_bitfield(struct Type* base,struct AST* number_of_bits);
- struct Type* get_function_type(struct Type* return_type,struct Queue *parameters,struct Scope* function_prototype_scope);
- char is_type(struct Queue *tokens,struct Scope *scope);
- size_t get_type_size(struct Type *type);
-
-
-
- #endif
F diff --git a/type.hh b/type.hh
deleted file mode 100644
--- a/type.hh
+++ /dev/null
- #ifndef GCC_TYPE_HH
- #define GCC_TYPE_HH GCC_TYPE_HH
-
-
- /*this isn't just type-specifier :DD*/
- enum Type_Specifier
- {
- TS_VOID,
- TS_CHAR,
- TS_INT,
- TS_FLOAT,
- TS_DOUBLE,
- TS_STRUCT,
- TS_ENUM,
- TS_UNION,
- TS_POINTER,
- TS_ARRAY,
- TS_FUNC,
- TS_BITFIELD,
- TS_NONE,
- TS_ERROR
- };
- enum Type_Constraint
- {
- TC_LONG,
- TC_LONG_LONG,
- TC_SHORT,
- TC_NONE
- };
- enum Type_Signedness
- {
- TSIGN_SIGNED,
- TSIGN_UNSIGNED,
- TSIGN_NONE
- };
- struct Type;
- struct Type_Error;
- struct Type_Struct_Union;
- struct Struct_Union;
- struct Type_Bit_Field;
- struct Type_Basic;
- struct Type_Pointer;
- struct Type_Array;
- struct Type_Function;
- struct Type_Enum;
- struct Enum;
- #endif