added -lfl to LDFLAGS in main Makefile, added parser/parser.{lex,yy} and parser/Makefile (for real this time)

git-svn-id: svn://anubis/fart/trunk@79 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
Josh Holtrop 2009-02-04 18:45:55 +00:00
parent 31a7f0fedf
commit 1fe251f27d
4 changed files with 144 additions and 0 deletions

View File

@ -7,6 +7,8 @@ export CPPFLAGS += -I"$(shell pwd)"
endif
export CXXFLAGS := -Wall -O1
LDFLAGS := -lfl
all: $(TARGET)
.PHONY: $(TARGET)

29
parser/Makefile Normal file
View File

@ -0,0 +1,29 @@
FLEX := flex
BISON := bison
PARSER := parser
COBJS := lex.yy.o
CXXOBJS := $(PARSER).tab.o
CXXOBJS += ASTNode.o
all: $(COBJS) $(CXXOBJS)
%.o: %.c
$(CC) -c -o $@ $<
%.o: %.cc
$(CXX) -c -o $@ $<
$(PARSER).tab.cc $(PARSER).tab.hh: $(PARSER).yy
$(BISON) -d $<
lex.yy.o: lex.yy.c
lex.yy.c: $(PARSER).tab.hh
lex.yy.c: $(PARSER).lex
$(FLEX) $<
clean:
-rm -f lex.yy.c $(PARSER).tab.cc $(PARSER).tab.hh *~ *.o

37
parser/parser.lex Normal file
View File

@ -0,0 +1,37 @@
%{
#include "parser.tab.hh"
%}
%%
\+ return PLUS;
- return MINUS;
\* return STAR;
\/ return DIVIDE;
% return MOD;
; return SEMICOLON;
: return COLON;
\? return QUESTION;
\$ return DOLLAR;
\. return DOT;
\" return DQUOTE;
\' return SQUOTE;
, return COMMA;
\{ return LCURLY;
\} return RCURLY;
\[ return LBRACKET;
\] return RBRACKET;
\( return LPAREN;
\) return RPAREN;
0b[01]+ return BIN_NUMBER;
0x[0-9A-Fa-f]+ return HEX_NUMBER;
0[0-7]* return OCT_NUMBER;
[1-9][0-9]* return DEC_NUMBER;
\n /* ignore newlines */
[ \t\v] /* ignore whitespace */
%%

76
parser/parser.yy Normal file
View File

@ -0,0 +1,76 @@
%{
#include <stdio.h>
#include <iostream>
using namespace std;
extern "C" {
int yylex(void);
}
extern FILE * yyin;
void yyerror(const char * str)
{
fprintf(stderr, "error: %s\n", str);
}
int yywrap()
{
return 1;
}
%}
%token PLUS;
%token MINUS;
%token STAR;
%token DIVIDE;
%token MOD;
%token SEMICOLON;
%token COLON;
%token QUESTION;
%token DOLLAR;
%token DOT;
%token DQUOTE;
%token SQUOTE;
%token COMMA;
%token LCURLY;
%token RCURLY;
%token LBRACKET;
%token RBRACKET;
%token LPAREN;
%token RPAREN;
%token BIN_NUMBER;
%token HEX_NUMBER;
%token OCT_NUMBER;
%token DEC_NUMBER;
%%
program: /* empty */
| number program { printf("Saw a number\n"); }
;
number: BIN_NUMBER
| OCT_NUMBER
| DEC_NUMBER
| HEX_NUMBER
;
%%
int parse(const char * fileName)
{
yyin = fopen(fileName, "r");
if (yyin == NULL)
{
cerr << "Failed to open file '" << fileName << "'" << endl;
return -1;
}
yyparse();
}