Fix BF segfault

This commit is contained in:
Robin Jadoul 2017-01-31 15:23:42 +01:00
parent 5f723f1774
commit f4bba7dd5e
3 changed files with 6 additions and 6 deletions

View File

@ -35,7 +35,7 @@ void Generator::run() {
while (!lbrackets.empty()) while (!lbrackets.empty())
lbrackets.pop(); lbrackets.pop();
for(int instruct = 0; instruct < program.size(); instruct++) { for (std::size_t instruct = 0; instruct < program.size(); instruct++) {
switch(program[instruct]) { switch(program[instruct]) {
case Instruction::EMPTY: break; case Instruction::EMPTY: break;

View File

@ -79,6 +79,8 @@ Parser::Token Parser::lex() {
//std::cout << "PARSING: found RBRACKET" << (int)Instruction::RBRACKET << std::endl; //std::cout << "PARSING: found RBRACKET" << (int)Instruction::RBRACKET << std::endl;
return Token{ bfParser_Symbol::T_RBRACKET, std::move(p) }; return Token{ bfParser_Symbol::T_RBRACKET, std::move(p) };
} }
default:
return Token { bfParser_Symbol::T_EOF, nullptr };
} }
} catch(BfLexer::NoMoreTokens) { } catch(BfLexer::NoMoreTokens) {
return Token{ bfParser_Symbol::T_EOF, nullptr }; return Token{ bfParser_Symbol::T_EOF, nullptr };
@ -87,15 +89,13 @@ Parser::Token Parser::lex() {
std::unique_ptr<std::deque<Instruction>> Parser::reduce_PROGRAM(std::deque<Token> subparts) { std::unique_ptr<std::deque<Instruction>> Parser::reduce_PROGRAM(std::deque<Token> subparts) {
// <program> ::= <instruction> <program> // <program> ::= <instruction> <program>
if (subparts[1].value == nullptr)
return std::move(subparts[0].value);
for(auto& instr : *(subparts[1].value)) for(auto& instr : *(subparts[1].value))
subparts[0].value->push_back(instr); subparts[0].value->push_back(instr);
return std::move(subparts[0].value); return std::move(subparts[0].value);
} }
std::unique_ptr<std::deque<Instruction>> Parser::reduce_EMPTY(std::deque<Token> subparts) { std::unique_ptr<std::deque<Instruction>> Parser::reduce_EMPTY(std::deque<Token>) {
// <program> ::= // <program> ::=
return nullptr; return std::make_unique<std::deque<Instruction>>();
} }
std::unique_ptr<std::deque<Instruction>> Parser::reduce_OPERATION(std::deque<Token> subparts) { std::unique_ptr<std::deque<Instruction>> Parser::reduce_OPERATION(std::deque<Token> subparts) {
// <instruction> ::= "PLUS" | "MINUS" | ... | "COMMA" // <instruction> ::= "PLUS" | "MINUS" | ... | "COMMA"

View File

@ -1 +1 @@
Hello World! Hello World!