From e223ffa7332e674c621d830d1012fbb481b5f444 Mon Sep 17 00:00:00 2001 From: josh Date: Fri, 7 Nov 2008 01:16:52 +0000 Subject: [PATCH] added integer, fp, void types, ... git-svn-id: svn://anubis/misc/llvm@72 bd8a9e45-a331-0410-811e-c64571078777 --- jlc/jlc.lex | 23 +++++++++++++++++-- jlc/jlc.y | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 83 insertions(+), 5 deletions(-) diff --git a/jlc/jlc.lex b/jlc/jlc.lex index 03430ce..c1fcdcd 100644 --- a/jlc/jlc.lex +++ b/jlc/jlc.lex @@ -25,7 +25,7 @@ \+ return PLUS; - return MINUS; -\* return TIMES; +\* return STAR; \/ return DIVIDE; % return MOD; @@ -34,8 +34,10 @@ \? return QUESTION; \$ return DOLLAR; \. return DOT; +\.\.\. return DOTDOTDOT; \" return DQUOTE; \' return SQUOTE; +, return COMMA; \{ return LCURLY; \} return RCURLY; @@ -54,7 +56,24 @@ module return MODULE; return return RETURN; use return USE; -[a-zA-Z_][a-zA-Z_0-9]* return ID; +bool return U1; +u1 return U1; +i8 return I8; +u8 return U8; +i16 return I16; +u16 return U16; +i32 return I32; +u32 return U32; +i64 return I64; +u64 return U64; + +float return FLOAT; +double return DOUBLE; + +void return VOID; + +\$[a-zA-Z_][a-zA-Z_0-9]* return FFIID; +[a-zA-Z_][a-zA-Z_0-9]* return ID; \n /* ignore newlines */ [ \t\v] /* ignore whitespace */ diff --git a/jlc/jlc.y b/jlc/jlc.y index 7b3c653..c18a6f8 100644 --- a/jlc/jlc.y +++ b/jlc/jlc.y @@ -46,7 +46,7 @@ int main(int argc, char * argv[]) %token PLUS; %token MINUS; -%token TIMES; +%token STAR; %token DIVIDE; %token MOD; @@ -55,8 +55,10 @@ int main(int argc, char * argv[]) %token QUESTION; %token DOLLAR; %token DOT; +%token DOTDOTDOT; %token DQUOTE; %token SQUOTE; +%token COMMA; %token LCURLY; %token RCURLY; @@ -75,13 +77,71 @@ int main(int argc, char * argv[]) %token RETURN; %token USE; +%token U1; +%token I8; +%token U8; +%token I16; +%token U16; +%token I32; +%token U32; +%token I64; +%token U64; + +%token FLOAT; +%token DOUBLE; + +%token VOID; + +%token FFIID; %token ID; %% program: /* empty */ + | use program + | module program { printf("Saw a module declaration\n"); } + | ffidecl program { printf("Saw a ffidecl\n"); } | number program { printf("Saw a number\n"); } | assignment program { printf("Saw an assignment\n"); } + ; + +use: USE modname SEMICOLON; + +module: MODULE modname SEMICOLON; + +modname: ID more_modname ; + +more_modname: /* empty */ + | DOT ID more_modname + ; + +ffidecl: type FFIID DOT ID LPAREN arglist RPAREN SEMICOLON; + +type: U1 + | I8 + | U8 + | I16 + | U16 + | I32 + | U32 + | I64 + | U64 + | FLOAT + | DOUBLE + | ID + | type STAR + ; + +arglist: /* empty */ + | var_decl more_arglist + ; + +more_arglist: /* empty */ + | COMMA var_decl more_arglist + | COMMA DOTDOTDOT + ; + +var_decl: type ID ; number: BIN_NUMBER | OCT_NUMBER @@ -89,5 +149,4 @@ number: BIN_NUMBER | HEX_NUMBER ; -assignment: ID ASSIGN number - ; +assignment: ID ASSIGN number SEMICOLON ;