delete parser generator. let's try recursive descent
This commit is contained in:
@@ -21,7 +21,6 @@ include_directories(
|
||||
)
|
||||
|
||||
set(GRAMMAR_TXT "${CMAKE_BINARY_DIR}/simple.txt")
|
||||
set(PARSER_GENERATED_CPP "${CMAKE_BINARY_DIR}/parser_generated.cpp")
|
||||
|
||||
set(ZIG_SOURCES
|
||||
"${CMAKE_SOURCE_DIR}/src/buffer.cpp"
|
||||
@@ -30,13 +29,6 @@ set(ZIG_SOURCES
|
||||
"${CMAKE_SOURCE_DIR}/src/parser.cpp"
|
||||
"${CMAKE_SOURCE_DIR}/src/tokenizer.cpp"
|
||||
"${CMAKE_SOURCE_DIR}/src/util.cpp"
|
||||
${PARSER_GENERATED_CPP}
|
||||
)
|
||||
|
||||
set(PARSERGEN_SOURCES
|
||||
"${CMAKE_SOURCE_DIR}/src/parsergen.cpp"
|
||||
"${CMAKE_SOURCE_DIR}/src/util.cpp"
|
||||
"${CMAKE_SOURCE_DIR}/src/buffer.cpp"
|
||||
)
|
||||
|
||||
set(CONFIGURE_OUT_FILE "${CMAKE_BINARY_DIR}/config.h")
|
||||
@@ -63,15 +55,3 @@ target_link_libraries(zig LINK_PUBLIC
|
||||
)
|
||||
install(TARGETS zig DESTINATION bin)
|
||||
|
||||
add_executable(parsergen ${PARSERGEN_SOURCES})
|
||||
set_target_properties(parsergen PROPERTIES
|
||||
LINKER_LANGUAGE C
|
||||
COMPILE_FLAGS ${EXE_CFLAGS})
|
||||
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${PARSER_GENERATED_CPP}
|
||||
COMMAND parsergen ARGS ${GRAMMAR_TXT} ${PARSER_GENERATED_CPP}
|
||||
DEPENDS ${GRAMMAR_TXT} ${PARSERGEN_SOURCES}
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
)
|
||||
|
||||
@@ -79,8 +79,13 @@ void ast_print(AstNode *node, int indent) {
|
||||
}
|
||||
}
|
||||
|
||||
AstNode *ast_create_root(Token *token) {
|
||||
return nullptr;
|
||||
struct ParseContext {
|
||||
Buf *buf;
|
||||
AstNode *root;
|
||||
};
|
||||
|
||||
AstNode *ast_create_root(void) {
|
||||
zig_panic("TODO create root");
|
||||
}
|
||||
|
||||
void ast_invalid_token_error(Buf *buf, Token *token) {
|
||||
@@ -88,3 +93,17 @@ void ast_invalid_token_error(Buf *buf, Token *token) {
|
||||
buf_init_from_mem(&token_value, buf_ptr(buf) + token->start_pos, token->end_pos - token->start_pos);
|
||||
ast_error(token, "invalid token: '%s'", buf_ptr(&token_value));
|
||||
}
|
||||
|
||||
void ast_parse_fn_decls(ParseContext *pc, ZigList<AstNode *> *fn_decls) {
|
||||
zig_panic("TODO parse fn decls");
|
||||
}
|
||||
|
||||
AstNode *ast_parse(Buf *buf, ZigList<Token> *tokens) {
|
||||
ParseContext pc = {0};
|
||||
pc.buf = buf;
|
||||
pc.root = ast_create_root();
|
||||
|
||||
ast_parse_fn_decls(&pc, &pc.root->data.root.fn_decls);
|
||||
|
||||
return pc.root;
|
||||
}
|
||||
|
||||
@@ -91,6 +91,6 @@ const char *node_type_str(NodeType node_type);
|
||||
|
||||
void ast_print(AstNode *node, int indent);
|
||||
|
||||
AstNode *ast_create_root(Token *token);
|
||||
AstNode *ast_create_root(void);
|
||||
|
||||
#endif
|
||||
|
||||
1125
src/parsergen.cpp
1125
src/parsergen.cpp
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user