diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..bce3865 --- /dev/null +++ b/src/main.c @@ -0,0 +1,8 @@ +#include + +int main(int argc, char * argv[]) +{ + printf("coming soon...\n"); + + return 0; +} diff --git a/src/parser/parser.h b/src/parser/parser.h new file mode 100644 index 0000000..bee509b --- /dev/null +++ b/src/parser/parser.h @@ -0,0 +1,4 @@ +#ifndef PARSER_H +#define PARSER_H + +#endif diff --git a/src/parser/parser.l b/src/parser/parser.l new file mode 100644 index 0000000..d9e6cb5 --- /dev/null +++ b/src/parser/parser.l @@ -0,0 +1,15 @@ +%option nounput +%option bison-locations + +%{ + +#include "parser.h" +#include "parser.tab.h" + +%} + +%x str + +%% + +%% diff --git a/src/parser/parser.y b/src/parser/parser.y new file mode 100644 index 0000000..ee97e17 --- /dev/null +++ b/src/parser/parser.y @@ -0,0 +1,38 @@ +%{ + +#include +#include "parser.h" +#include "parser.tab.h" + +#define yyerror(msg) handle_error(msg, &yyloc) + +int yylex(YYSTYPE *, YYLTYPE *); +static void handle_error(const char * str, const YYLTYPE * yylloc); + +%} + +%pure-parser +%locations +%error-verbose + +%token PLUS; +%token MINUS; + +%% + +translation_unit: PLUS; + +%% + +static void handle_error(const char * str, const YYLTYPE * yylloc) +{ + fprintf(stderr, "error: %s (line %d, column %d)\n", + str, + yylloc->first_line, + yylloc->first_column); +} + +int yywrap(void) +{ + return 1; +} diff --git a/wscript b/wscript index 00e999e..0fd2d64 100644 --- a/wscript +++ b/wscript @@ -1,5 +1,22 @@ +import sys + +APP_NAME = "cxlc" + +def options(opt): + opt.load("compiler_c"); + def configure(conf): - pass + conf.load("compiler_c flex bison"); def build(bld): - pass + sources = bld.path.ant_glob("src/**/*.c") + lexer_source = "src/parser/parser.l" + parser_source = "src/parser/parser.y" + sources += [lexer_source, parser_source] + includes = ["src", "src/parser"] + cflags = ["-Wall", "-O2"] + bld.program( + source = sources, + cflags = cflags, + target = APP_NAME, + includes = includes)