Refactor parser error messages
- move message generation to TSParseError, so that Parser doesn’t need to import <string>, and can be compiled as plain C.
This commit is contained in:
parent
f342067293
commit
7a3092b765
9 changed files with 91 additions and 90 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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", [&]() {
|
||||
|
|
|
|||
|
|
@ -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 <iostream>
|
||||
|
|
@ -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 "#<null tree>";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
27
src/runtime/parse_config.cpp
Normal file
27
src/runtime/parse_config.cpp
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
#include "parse_config.h"
|
||||
#include <string>
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
@ -1,9 +1,5 @@
|
|||
#include "parser.h"
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
@ -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 = "<group>"; };
|
||||
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 = "<group>"; };
|
||||
12C344421822F27700B07BE3 /* transition_map.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = transition_map.h; path = ../build_tables/transition_map.h; sourceTree = "<group>"; };
|
||||
12D1369E18342088005F3369 /* todo.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = todo.md; sourceTree = "<group>"; };
|
||||
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 = "<group>"; };
|
||||
12EDCFC41882153D005A7A07 /* next_symbols.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = next_symbols.cpp; sourceTree = "<group>"; };
|
||||
12EDCFC51882153D005A7A07 /* next_symbols.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = next_symbols.h; sourceTree = "<group>"; };
|
||||
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 = "<group>"; };
|
||||
12FD40DA185FEF0D0041A84E /* arithmetic_spec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = arithmetic_spec.cpp; sourceTree = "<group>"; };
|
||||
12FD40DC185FF12C0041A84E /* parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parser.cpp; sourceTree = "<group>"; };
|
||||
12FD40DC185FF12C0041A84E /* parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = parser.c; sourceTree = "<group>"; };
|
||||
12FD40DE1860064C0041A84E /* tree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tree.c; sourceTree = "<group>"; };
|
||||
12FD40E41862B3530041A84E /* visitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = visitor.h; sourceTree = "<group>"; };
|
||||
12FD40E618639B910041A84E /* visitor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = visitor.cpp; sourceTree = "<group>"; };
|
||||
|
|
@ -310,6 +291,8 @@
|
|||
12FD40AF185EE81D0041A84E /* fixtures */,
|
||||
121492E9181E200B008E9BDA /* main.cpp */,
|
||||
12FD40B0185EE97E0041A84E /* runtime */,
|
||||
12F9A64C182DD5FD00FAF50C /* spec_helper.cpp */,
|
||||
12F9A64D182DD5FD00FAF50C /* spec_helper.h */,
|
||||
);
|
||||
path = spec;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -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 = "<group>";
|
||||
|
|
@ -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 = "<group>";
|
||||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue