153 lines
2.1 KiB
Plaintext
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 ;
|