llvm/jlc/jlc.y
josh e223ffa733 added integer, fp, void types, ...
git-svn-id: svn://anubis/misc/llvm@72 bd8a9e45-a331-0410-811e-c64571078777
2008-11-07 01:16:52 +00:00

153 lines
2.1 KiB
Plaintext

%{
#include <stdio.h>
extern FILE * yyin;
void yyerror(const char * str)
{
fprintf(stderr, "error: %s\n", str);
}
int yywrap()
{
return 1;
}
int main(int argc, char * argv[])
{
if (argc > 0)
{
yyin = fopen(argv[1], "r");
}
yyparse();
}
%}
%token ASSIGN;
%token EQUAL;
%token LEQ;
%token GEQ;
%token LSHIFT;
%token RSHIFT;
%token AND;
%token OR;
%token NOT;
%token BIT_AND;
%token BIT_OR;
%token BIT_XOR;
%token BIT_NEG;
%token INCREMENT;
%token DECREMENT;
%token PLUS;
%token MINUS;
%token STAR;
%token DIVIDE;
%token MOD;
%token SEMICOLON;
%token COLON;
%token QUESTION;
%token DOLLAR;
%token DOT;
%token DOTDOTDOT;
%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;
%token ALIAS;
%token MODULE;
%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
| DEC_NUMBER
| HEX_NUMBER
;
assignment: ID ASSIGN number SEMICOLON ;