diff --git a/include/parse_config.h b/include/parse_config.h index 05c97c67..d072492b 100644 --- a/include/parse_config.h +++ b/include/parse_config.h @@ -3,11 +3,26 @@ #include "tree.h" +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + TSParseErrorTypeNone, + TSParseErrorTypeLexical, + TSParseErrorTypeSyntactic, +} TSParseErrorType; + typedef struct { - const char *message; + TSParseErrorType type; + const char **expected_inputs; + size_t expected_input_count; size_t position; + long lookahead_sym; } TSParseError; +const char * TSParseErrorToString(const TSParseError *error, const char *input_string, const char **symbol_names); + typedef struct { TSParseError error; TSTree *tree; @@ -20,4 +35,7 @@ typedef struct { const char **symbol_names; } TSParseConfig; +#ifdef __cplusplus +} +#endif #endif diff --git a/include/parser.h b/include/parser.h index ec31dfe7..38cee290 100644 --- a/include/parser.h +++ b/include/parser.h @@ -12,14 +12,13 @@ extern "C" { typedef int TSState; typedef struct TSStackEntry TSStackEntry; typedef struct TSParser { - TSTree *tree; const char *input; - const char *error_message; size_t position; TSTree *lookahead_node; TSState lex_state; TSStackEntry *stack; size_t stack_size; + TSParseResult result; } TSParser; TSParser TSParserMake(const char *input); diff --git a/spec/compiler/compile_fixtures.cpp b/spec/compiler/compile_fixtures.cpp index f674b889..536afd72 100644 --- a/spec/compiler/compile_fixtures.cpp +++ b/spec/compiler/compile_fixtures.cpp @@ -5,7 +5,7 @@ START_TEST -describe("code generation", []() { +describe("compiling grammars", []() { string test_parser_dir = src_dir() + "/spec/fixtures/parsers"; it("works for the arithmetic grammar", [&]() { diff --git a/spec/compiler/spec_helper.cpp b/spec/spec_helper.cpp similarity index 100% rename from spec/compiler/spec_helper.cpp rename to spec/spec_helper.cpp diff --git a/spec/compiler/spec_helper.h b/spec/spec_helper.h similarity index 96% rename from spec/compiler/spec_helper.h rename to spec/spec_helper.h index 2fa3a62b..1dec0ba0 100644 --- a/spec/compiler/spec_helper.h +++ b/spec/spec_helper.h @@ -1,5 +1,5 @@ -#ifndef TreeSitter_SpecHelper_h -#define TreeSitter_SpecHelper_h +#ifndef __tree_sitter_spec_helper_h__ +#define __tree_sitter_spec_helper_h__ #include "bandit/bandit.h" #include diff --git a/src/runtime/document.c b/src/runtime/document.c index a67214be..82129d09 100644 --- a/src/runtime/document.c +++ b/src/runtime/document.c @@ -4,7 +4,7 @@ struct TSDocument { TSParseFn *parse_fn; const char **symbol_names; const char *text; - const char *error_message; + TSParseError error; TSTree *tree; }; @@ -22,7 +22,7 @@ void TSDocumentSetText(TSDocument *document, const char *text) { document->text = text; TSParseResult result = document->parse_fn(text); document->tree = result.tree; - document->error_message = result.error.message; + document->error = result.error; } TSTree * TSDocumentTree(const TSDocument *document) { @@ -30,10 +30,11 @@ TSTree * TSDocumentTree(const TSDocument *document) { } const char * TSDocumentToString(const TSDocument *document) { - if (document->error_message) { - return document->error_message; - } else if (document->tree) + if (document->error.type != TSParseErrorTypeNone) { + return TSParseErrorToString(&document->error, document->text, document->symbol_names); + } else if (document->tree) { return TSTreeToString(document->tree, document->symbol_names); - else + } else { return "#"; + } } diff --git a/src/runtime/parse_config.cpp b/src/runtime/parse_config.cpp new file mode 100644 index 00000000..f0e4521a --- /dev/null +++ b/src/runtime/parse_config.cpp @@ -0,0 +1,27 @@ +#include "parse_config.h" +#include + +using std::string; +static const char * EMPTY = ""; + +const char * TSParseErrorToString(const TSParseError *error, const char *input_string, const char **symbol_names) { + string result; + switch (error->type) { + case TSParseErrorTypeSyntactic: + result = string("Unexpected token ") + symbol_names[error->lookahead_sym] + ". "; + break; + case TSParseErrorTypeLexical: + result = string("Unexpected character '") + (input_string + error->position) + "'. "; + break; + default: + return EMPTY; + } + + result += "Expected: "; + for (int i = 0; i < error->expected_input_count; i++) + result += string(" '") + error->expected_inputs[i] + "'"; + + char *stuff = (char *)malloc(result.size() * sizeof(char)); + strcpy(stuff, result.c_str()); + return stuff; +} diff --git a/src/runtime/parser.cpp b/src/runtime/parser.c similarity index 67% rename from src/runtime/parser.cpp rename to src/runtime/parser.c index 16c620cd..814c2604 100644 --- a/src/runtime/parser.cpp +++ b/src/runtime/parser.c @@ -1,9 +1,5 @@ #include "parser.h" #include -#include - -using std::string; -using std::to_string; #define TS_DEBUG_PARSE #define TS_DEBUG_LEX @@ -29,14 +25,20 @@ struct TSStackEntry { TSParser TSParserMake(const char *input) { TSParser result = { - .tree = NULL, .input = input, - .error_message = NULL, .position = 0, .lookahead_node = NULL, .lex_state = 0, - .stack = (TSStackEntry *)calloc(INITIAL_STACK_SIZE, sizeof(TSStackEntry)), + .stack = calloc(INITIAL_STACK_SIZE, sizeof(TSStackEntry)), .stack_size = 0, + .result = { + .tree = NULL, + .error = { + .type = TSParseErrorTypeNone, + .expected_inputs = NULL, + .expected_input_count = 0 + }, + }, }; return result; } @@ -53,7 +55,7 @@ void TSParserShift(TSParser *parser, TSState parse_state) { void TSParserReduce(TSParser *parser, TSSymbol symbol, int child_count) { parser->stack_size -= child_count; - TSTree **children = (TSTree **)malloc(child_count * sizeof(TSTree *)); + TSTree **children = malloc(child_count * sizeof(TSTree *)); for (int i = 0; i < child_count; i++) { children[i] = parser->stack[parser->stack_size + i].node; } @@ -63,23 +65,19 @@ void TSParserReduce(TSParser *parser, TSSymbol symbol, int child_count) { } void TSParserError(TSParser *parser, size_t count, const char **expected_inputs) { - string result = "Unexpected token " + to_string(TSParserLookaheadSym(parser)) + ". "; - result += "Expected tokens:"; - for (int i = 0; i < count; i++) - result += string(" '") + expected_inputs[i] + "'"; - char *stuff = (char *)malloc(result.size() * sizeof(char)); - strcpy(stuff, result.c_str()); - parser->error_message = stuff; + TSParseError *error = &parser->result.error; + error->type = TSParseErrorTypeSyntactic; + error->expected_input_count = count; + error->expected_inputs = expected_inputs; + error->lookahead_sym = TSParserLookaheadSym(parser); } void TSParserLexError(TSParser *parser, size_t count, const char **expected_inputs) { - string result = string("Unexpected character '") + TSParserLookaheadChar(parser) + "'. "; - result += "Expected characters:"; - for (int i = 0; i < count; i++) - result += string(" ") + expected_inputs[i] + ""; - char *stuff = (char *)malloc(result.size() * sizeof(char)); - strcpy(stuff, result.c_str()); - parser->error_message = stuff; + TSParseError *error = &parser->result.error; + error->type = TSParseErrorTypeLexical; + error->expected_input_count = count; + error->expected_inputs = expected_inputs; + error->lookahead_sym = TSParserLookaheadSym(parser); } void TSParserAdvance(TSParser *parser, TSState lex_state) { @@ -115,13 +113,9 @@ void TSParserSetLexState(TSParser *parser, TSState lex_state) { } void TSParserAcceptInput(TSParser *parser) { - parser->tree = parser->stack[parser->stack_size - 1].node; + parser->result.tree = parser->stack[parser->stack_size - 1].node; } TSParseResult TSParserResult(TSParser *parser) { - TSParseResult result = { - .tree = parser->tree, - .error = { .position = parser->position, .message = parser->error_message } - }; - return result; + return parser->result; } diff --git a/tree_sitter.xcodeproj/project.pbxproj b/tree_sitter.xcodeproj/project.pbxproj index 02306262..51381b44 100644 --- a/tree_sitter.xcodeproj/project.pbxproj +++ b/tree_sitter.xcodeproj/project.pbxproj @@ -17,17 +17,13 @@ 1225CC6418765693000D4723 /* prepare_grammar_spec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1225CC6318765693000D4723 /* prepare_grammar_spec.cpp */; }; 1251209B1830145300C9B56A /* rule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1251209A1830145300C9B56A /* rule.cpp */; }; 125120A4183083BD00C9B56A /* arithmetic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 125120A3183083BD00C9B56A /* arithmetic.cpp */; }; + 12BC470518822B27005AC502 /* parse_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12BC470318822A17005AC502 /* parse_config.cpp */; }; 12D136A4183678A2005F3369 /* repeat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12D136A2183678A2005F3369 /* repeat.cpp */; }; 12EDCF8A187B498C005A7A07 /* tree_spec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12EDCF89187B498C005A7A07 /* tree_spec.cpp */; }; 12EDCF8D187C6282005A7A07 /* document.c in Sources */ = {isa = PBXBuildFile; fileRef = 12EDCF8C187C6282005A7A07 /* document.c */; }; 12EDCF981881FCD5005A7A07 /* extract_tokens.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12EDCF8F1881FCCA005A7A07 /* extract_tokens.cpp */; }; 12EDCF991881FCD9005A7A07 /* perform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12EDCF911881FCCA005A7A07 /* perform.cpp */; }; 12EDCF9A1881FCD9005A7A07 /* search_for_symbols.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12EDCF931881FCCA005A7A07 /* search_for_symbols.cpp */; }; - 12EDCF9F18820116005A7A07 /* parse_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12EDCF9D18820116005A7A07 /* parse_table.cpp */; }; - 12EDCFA818820137005A7A07 /* item_set.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12EDCFA018820137005A7A07 /* item_set.cpp */; }; - 12EDCFA918820137005A7A07 /* item.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12EDCFA218820137005A7A07 /* item.cpp */; }; - 12EDCFAA18820137005A7A07 /* perform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12EDCFA418820137005A7A07 /* perform.cpp */; }; - 12EDCFAB18820137005A7A07 /* rule_transitions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12EDCFA618820137005A7A07 /* rule_transitions.cpp */; }; 12EDCFAF18820387005A7A07 /* parse_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12EDCF9D18820116005A7A07 /* parse_table.cpp */; }; 12EDCFB018820392005A7A07 /* item.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12EDCFA218820137005A7A07 /* item.cpp */; }; 12EDCFB118820395005A7A07 /* item_set.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12EDCFA018820137005A7A07 /* item_set.cpp */; }; @@ -43,33 +39,17 @@ 12F9A651182DD6BC00FAF50C /* grammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12F9A64F182DD6BC00FAF50C /* grammar.cpp */; }; 12FD4061185E68470041A84E /* c_code.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12FD405F185E68470041A84E /* c_code.cpp */; }; 12FD4064185E75290041A84E /* compile_fixtures.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12FD4063185E75290041A84E /* compile_fixtures.cpp */; }; - 12FD40B3185EEB5E0041A84E /* seq.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12130612182C3A1700FCF928 /* seq.cpp */; }; - 12FD40B6185EEB5E0041A84E /* arithmetic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 125120A3183083BD00C9B56A /* arithmetic.cpp */; }; - 12FD40B9185EEB5E0041A84E /* string.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12130615182C3D2900FCF928 /* string.cpp */; }; - 12FD40BB185EEB5E0041A84E /* blank.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1213060F182C3A1100FCF928 /* blank.cpp */; }; - 12FD40BD185EEB5E0041A84E /* choice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1213060C182C398300FCF928 /* choice.cpp */; }; - 12FD40BF185EEB5E0041A84E /* c_code.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12FD405F185E68470041A84E /* c_code.cpp */; }; 12FD40C2185EEB5E0041A84E /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 121492E9181E200B008E9BDA /* main.cpp */; }; - 12FD40C3185EEB5E0041A84E /* grammar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12F9A64F182DD6BC00FAF50C /* grammar.cpp */; }; - 12FD40C6185EEB5E0041A84E /* repeat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12D136A2183678A2005F3369 /* repeat.cpp */; }; - 12FD40C8185EEB5E0041A84E /* character.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12130603182C348F00FCF928 /* character.cpp */; }; - 12FD40C9185EEB5E0041A84E /* symbol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12130609182C389100FCF928 /* symbol.cpp */; }; - 12FD40CA185EEB5E0041A84E /* rule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1251209A1830145300C9B56A /* rule.cpp */; }; - 12FD40CB185EEB5E0041A84E /* pattern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27A340F3EEB184C040521323 /* pattern.cpp */; }; 12FD40D2185EEB970041A84E /* arithmetic.c in Sources */ = {isa = PBXBuildFile; fileRef = 12FD4065185E7C2F0041A84E /* arithmetic.c */; }; 12FD40D8185FEEDF0041A84E /* rules_spec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 121492EA181E200B008E9BDA /* rules_spec.cpp */; }; 12FD40D9185FEEDF0041A84E /* pattern_spec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12D136A0183570F5005F3369 /* pattern_spec.cpp */; }; 12FD40DB185FEF0D0041A84E /* arithmetic_spec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40DA185FEF0D0041A84E /* arithmetic_spec.cpp */; }; - 12FD40DD185FF12C0041A84E /* parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40DC185FF12C0041A84E /* parser.cpp */; }; + 12FD40DD185FF12C0041A84E /* parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40DC185FF12C0041A84E /* parser.c */; }; 12FD40DF1860064C0041A84E /* tree.c in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40DE1860064C0041A84E /* tree.c */; }; 12FD40E718639B910041A84E /* visitor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40E618639B910041A84E /* visitor.cpp */; }; 12FD40E918641FB70041A84E /* rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40E818641FB70041A84E /* rules.cpp */; }; - 12FD40EE186641430041A84E /* rules.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40E818641FB70041A84E /* rules.cpp */; }; - 12FD40F01866415D0041A84E /* visitor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40E618639B910041A84E /* visitor.cpp */; }; 12FD40F3186641C00041A84E /* char_match.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40F1186641C00041A84E /* char_match.cpp */; }; - 12FD40F4186641C00041A84E /* char_match.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40F1186641C00041A84E /* char_match.cpp */; }; 12FD40F7186A16020041A84E /* lex_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40F5186A16020041A84E /* lex_table.cpp */; }; - 12FD40F8186A16030041A84E /* lex_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40F5186A16020041A84E /* lex_table.cpp */; }; 27A343CA69E17E0F9EBEDF1C /* pattern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27A340F3EEB184C040521323 /* pattern.cpp */; }; /* End PBXBuildFile section */ @@ -115,6 +95,7 @@ 1251209A1830145300C9B56A /* rule.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rule.cpp; sourceTree = ""; }; 125120A218307FFD00C9B56A /* arithmetic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = arithmetic.h; path = spec/fixtures/grammars/arithmetic.h; sourceTree = SOURCE_ROOT; }; 125120A3183083BD00C9B56A /* arithmetic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = arithmetic.cpp; path = spec/fixtures/grammars/arithmetic.cpp; sourceTree = SOURCE_ROOT; }; + 12BC470318822A17005AC502 /* parse_config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parse_config.cpp; sourceTree = ""; }; 12C344421822F27700B07BE3 /* transition_map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = transition_map.h; path = ../build_tables/transition_map.h; sourceTree = ""; }; 12D1369E18342088005F3369 /* todo.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = todo.md; sourceTree = ""; }; 12D136A0183570F5005F3369 /* pattern_spec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pattern_spec.cpp; path = spec/compiler/rules/pattern_spec.cpp; sourceTree = SOURCE_ROOT; }; @@ -153,8 +134,8 @@ 12EDCFC218820A70005A7A07 /* item_set_transitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = item_set_transitions.h; sourceTree = ""; }; 12EDCFC41882153D005A7A07 /* next_symbols.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = next_symbols.cpp; sourceTree = ""; }; 12EDCFC51882153D005A7A07 /* next_symbols.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = next_symbols.h; sourceTree = ""; }; - 12F9A64C182DD5FD00FAF50C /* spec_helper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = spec_helper.cpp; path = spec/compiler/spec_helper.cpp; sourceTree = SOURCE_ROOT; }; - 12F9A64D182DD5FD00FAF50C /* spec_helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spec_helper.h; path = spec/compiler/spec_helper.h; sourceTree = SOURCE_ROOT; }; + 12F9A64C182DD5FD00FAF50C /* spec_helper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = spec_helper.cpp; path = spec/spec_helper.cpp; sourceTree = SOURCE_ROOT; }; + 12F9A64D182DD5FD00FAF50C /* spec_helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spec_helper.h; path = spec/spec_helper.h; sourceTree = SOURCE_ROOT; }; 12F9A64F182DD6BC00FAF50C /* grammar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = grammar.cpp; path = src/compiler/grammar.cpp; sourceTree = SOURCE_ROOT; }; 12F9A650182DD6BC00FAF50C /* grammar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = grammar.h; path = src/compiler/grammar.h; sourceTree = SOURCE_ROOT; }; 12FD405F185E68470041A84E /* c_code.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = c_code.cpp; path = src/compiler/generate_code/c_code.cpp; sourceTree = SOURCE_ROOT; }; @@ -164,7 +145,7 @@ 12FD40D1185EEB5E0041A84E /* runtime_specs */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = runtime_specs; sourceTree = BUILT_PRODUCTS_DIR; }; 12FD40D4185FED9A0041A84E /* tree.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tree.h; sourceTree = ""; }; 12FD40DA185FEF0D0041A84E /* arithmetic_spec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = arithmetic_spec.cpp; sourceTree = ""; }; - 12FD40DC185FF12C0041A84E /* parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parser.cpp; sourceTree = ""; }; + 12FD40DC185FF12C0041A84E /* parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = parser.c; sourceTree = ""; }; 12FD40DE1860064C0041A84E /* tree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tree.c; sourceTree = ""; }; 12FD40E41862B3530041A84E /* visitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = visitor.h; sourceTree = ""; }; 12FD40E618639B910041A84E /* visitor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = visitor.cpp; sourceTree = ""; }; @@ -310,6 +291,8 @@ 12FD40AF185EE81D0041A84E /* fixtures */, 121492E9181E200B008E9BDA /* main.cpp */, 12FD40B0185EE97E0041A84E /* runtime */, + 12F9A64C182DD5FD00FAF50C /* spec_helper.cpp */, + 12F9A64D182DD5FD00FAF50C /* spec_helper.h */, ); path = spec; sourceTree = ""; @@ -369,9 +352,10 @@ 12FD40AD185EE5440041A84E /* runtime */ = { isa = PBXGroup; children = ( - 12FD40DC185FF12C0041A84E /* parser.cpp */, + 12FD40DC185FF12C0041A84E /* parser.c */, 12FD40DE1860064C0041A84E /* tree.c */, 12EDCF8C187C6282005A7A07 /* document.c */, + 12BC470318822A17005AC502 /* parse_config.cpp */, ); path = runtime; sourceTree = ""; @@ -383,8 +367,6 @@ 12FD4063185E75290041A84E /* compile_fixtures.cpp */, 1225CC6318765693000D4723 /* prepare_grammar_spec.cpp */, 12D1369F18357066005F3369 /* rules */, - 12F9A64C182DD5FD00FAF50C /* spec_helper.cpp */, - 12F9A64D182DD5FD00FAF50C /* spec_helper.h */, ); name = compiler; sourceTree = ""; @@ -529,34 +511,14 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 12FD40B3185EEB5E0041A84E /* seq.cpp in Sources */, - 12FD40B6185EEB5E0041A84E /* arithmetic.cpp in Sources */, - 12FD40DD185FF12C0041A84E /* parser.cpp in Sources */, + 12FD40DD185FF12C0041A84E /* parser.c in Sources */, 12EDCF8A187B498C005A7A07 /* tree_spec.cpp in Sources */, - 12EDCFA918820137005A7A07 /* item.cpp in Sources */, 12EDCF8D187C6282005A7A07 /* document.c in Sources */, - 12FD40B9185EEB5E0041A84E /* string.cpp in Sources */, - 12FD40BB185EEB5E0041A84E /* blank.cpp in Sources */, - 12FD40F4186641C00041A84E /* char_match.cpp in Sources */, - 12FD40BD185EEB5E0041A84E /* choice.cpp in Sources */, 12FD40DF1860064C0041A84E /* tree.c in Sources */, - 12FD40BF185EEB5E0041A84E /* c_code.cpp in Sources */, - 12FD40F8186A16030041A84E /* lex_table.cpp in Sources */, 12FD40D2185EEB970041A84E /* arithmetic.c in Sources */, - 12EDCFA818820137005A7A07 /* item_set.cpp in Sources */, 12FD40DB185FEF0D0041A84E /* arithmetic_spec.cpp in Sources */, - 12FD40F01866415D0041A84E /* visitor.cpp in Sources */, - 12EDCF9F18820116005A7A07 /* parse_table.cpp in Sources */, 12FD40C2185EEB5E0041A84E /* main.cpp in Sources */, - 12FD40C3185EEB5E0041A84E /* grammar.cpp in Sources */, - 12FD40C6185EEB5E0041A84E /* repeat.cpp in Sources */, - 12FD40C8185EEB5E0041A84E /* character.cpp in Sources */, - 12EDCFAB18820137005A7A07 /* rule_transitions.cpp in Sources */, - 12FD40C9185EEB5E0041A84E /* symbol.cpp in Sources */, - 12FD40CA185EEB5E0041A84E /* rule.cpp in Sources */, - 12FD40EE186641430041A84E /* rules.cpp in Sources */, - 12EDCFAA18820137005A7A07 /* perform.cpp in Sources */, - 12FD40CB185EEB5E0041A84E /* pattern.cpp in Sources */, + 12BC470518822B27005AC502 /* parse_config.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; };