Summary Files Commits Branches @commit @diff @stats
path: root / Year 2 / Implementation of Programming Languages / Transpiler / frontend / commonlisp2transpilerstr.y
blob: b7675a3c1f719c892dbd05b9e631595eadaed7e4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
%{
#include <stdio.h>
#include <string.h>

int yylex();
int yyerror(char *s);
%}

%token LBRACKET RBRACKET NAME
%token INTEGER FLOAT FUNCTION

%define api.value.type {char*}

%%

start:
	 | start expr { printf("%s", $2); }

expr: LBRACKET FUNCTION start RBRACKET  { sprintf($$, "new Funcall(\"%s\", { %s })", $2, $3); }
	| LBRACKET namelist RBRACKET        { sprintf($$, "new List({ %s })", $2); }
	| INTEGER                           { sprintf($$, "new Integer(%s)", $1); }
	| FLOAT                             { sprintf($$, "new Float(%s)", $1); }
	| NAME                              { sprintf($$, "new Name(\"%s\")", $1); }
	;

namelist:               { $$ = ""; }
		| namelist NAME { sprintf($$, ", new Name(\"%s\")", $1); }
		;

%%

int yyerror(char *s) {
	printf("Error: %s\n", s);
	return 0;
}

int main(int argc, char **argv) {
/* #ifdef YYDEBUG */
/*   yydebug = 1; */
/* #endif */
	yyparse();
}