removed deprecated lemon code and moved hyrise related files to subfolder

This commit is contained in:
Pedro 2015-05-27 22:18:47 +02:00
parent d378c55fb4
commit 1aa2a62f22
15 changed files with 0 additions and 139 deletions

View File

@ -1,5 +0,0 @@
flex_scanner.h
flex_scanner.c
lemon_parser.h
lemon_parser.c
lemon_test

View File

@ -1,9 +0,0 @@
rm -f lemon_test lemon_parser.c lemon_parser.h flex_scanner.c flex_scanner.h
echo "Lemon"
lemon lemon_parser.y
echo "Flex"
# flex lexer.l
flex --outfile=flex_scanner.c --header-file=flex_scanner.h flex_scanner.l
echo "Compile"
g++ main.cpp lemon_parser.c flex_scanner.c -o lemon_test -std=c++11 -pthread
./lemon_test

View File

@ -1,22 +0,0 @@
%{
#include "lemon_parser.h"
#include <stdlib.h>
#include "token_def.h"
%}
%option reentrant
%option noyywrap
%option bison-bridge
%%
[0-9]+|[0-9]+.[0-9]+ { yylval->fval = atof(yytext); return NUMBER; }
[+] return PLUS;
[\n] return NL;
[ \t] ; /* skip whitespace */
. {printf("Unknown character '%c'\n", yytext[0]); return 0;}
%%

View File

@ -1,23 +0,0 @@
%include {
#include <assert.h>
#include <cstdlib>
#include "token_def.h"
}
%syntax_error { printf("Lemon syntax error\n"); }
%token_type {LexerToken*}
%extra_argument { float* result }
%type expr {float}
%left PLUS MINUS .
start ::= prog.
prog ::= prog print NL .
prog ::= prog print .
prog ::= .
print ::= expr(a) . { *result = a; }
expr(a) ::= NUMBER(b) . { a = b->fval; }
expr(a) ::= expr(b) PLUS expr(c) . { a = b + c; }

View File

@ -1,71 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include <thread>
#include "token_def.h"
#include "lemon_parser.h"
#include "flex_scanner.h"
// Based on https://github.com/theory/flex-lemon-example
// and http://stackoverflow.com/questions/24833465/bison-yacc-vs-lemon-vs-standard-input
typedef float ResultType;
void *ParseAlloc(void *(*mallocProc)(size_t));
void ParseFree(void *p, void (*freeProc)(void*));
void Parse(void *yyp, int yymajor, LexerToken* token, ResultType*);
// int yylex(void);
// int yylval;
float parseString(const char* string) {
yyscan_t scanner;
yylex_init(&scanner);
// Scan the provided string
YY_BUFFER_STATE state = yy_scan_string(string, scanner);
void* lemonParser = ParseAlloc(malloc);
int tokenCode;
ResultType result;
do {
LexerToken token;
tokenCode = yylex(&token, scanner);
Parse(lemonParser, tokenCode, &token, &result);
// printf("Token %d\n", tokenCode);
} while (tokenCode > 0);
return result;
}
int parse_count = 0;
void multithreadTest(int numOfParses, int id) {
for (int n = 0; n < numOfParses; ++n) {
int a = rand() % 1000 + 1;
int b = rand() % 1000 + 1;
int c = a + b;
char string[32];
sprintf(string, "%d + %d", a, b);
parse_count++;
int result = parseString(string);
if (parse_count != 1) printf("+");
parse_count--;
if (result != c) printf("Error[%d]! %s != %d\n", id, string, result);
}
}
int main(void) {
const int numThreads = 20;
int numRuns = 300;
std::thread threads[numThreads];
for (int n = 0; n < numThreads; ++n) {
threads[n] = std::thread(multithreadTest, numRuns, n);
}
for (int n = 0; n < numThreads; ++n) {
threads[n].join();
}
return 0;
}

View File

@ -1,9 +0,0 @@
struct LexerToken {
char* sval;
float fval;
};
#define YYSTYPE LexerToken