From 8de90acc6791a62d4b2e48e9bd05daa0d5cfe4b6 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Fri, 27 Mar 2015 03:38:01 +0100 Subject: Generate items from grammar --- parser.cpp | 114 ------------------------------------------------------------- 1 file changed, 114 deletions(-) delete mode 100644 parser.cpp (limited to 'parser.cpp') diff --git a/parser.cpp b/parser.cpp deleted file mode 100644 index 637f945..0000000 --- a/parser.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/* - Copyright (c) 2015, Matthias Schiffer - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -#include "parser.hpp" - -#include -#include - - -namespace solar { - -enum parser_state { - STATE_INIT, - STATE_RULE_BAR, - STATE_RULE_EQUAL, - STATE_RULE, -}; - -struct parser { - parser_state state; -}; - -parser_t * parser_alloc(void) { - parser_t *parser = (parser_t *)std::malloc(sizeof(parser_t)); - parser->state = STATE_INIT; - - return parser; -} - -int parser_parse(parser_t *parser, int token, const value_t *value, state_t *state) { - switch (parser->state) { - case STATE_INIT: - switch (token) { - case TOK_NONTERM: - parser->state = STATE_RULE_BAR; - state->openRule(value->str); - return 1; - - case 0: - return 0; - } - - break; - - case STATE_RULE_BAR: - parser->state = STATE_RULE_EQUAL; - if (token == '|') - return 1; - - break; - - case STATE_RULE_EQUAL: - if (token == '=') { - parser->state = STATE_RULE; - return 1; - } - - break; - - case STATE_RULE: - switch (token) { - case TOK_NONTERM: - state->addRuleNonterminal(value->str); - return 1; - - case TOK_TERM: - state->addRuleTerminal(value->str); - return 1; - - case TOK_CHAR: - state->addRuleTerminal(value->number); - return 1; - - case TOK_BLOCK: - case ';': - state->closeRule(); - parser->state = STATE_INIT; - return 1; - } - - break; - } - - return -1; -} - -void parser_free(parser_t *parser) { - std::free(parser); -} - -} -- cgit v1.2.3