Begin semantics
This commit is contained in:
		
							parent
							
								
									acf66e1816
								
							
						
					
					
						commit
						4aff13c332
					
				| @ -1,3 +1,4 @@ | |||||||
|  | #include "syntax.h" | ||||||
| #include "lexer.h" | #include "lexer.h" | ||||||
| #include "parser.h" | #include "parser.h" | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| %{ | %{ | ||||||
|  | #include "syntax.h" | ||||||
| #include "parser.h" | #include "parser.h" | ||||||
| int stack[100]; // Max indentation depth | int stack[100]; // Max indentation depth | ||||||
| int sp = -1; | int sp = -1; | ||||||
|  | |||||||
							
								
								
									
										21
									
								
								src/parser.y
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								src/parser.y
									
									
									
									
									
								
							| @ -8,14 +8,19 @@ int yyerror(const char* p) { fprintf(stderr, p); } | |||||||
| %define parse.trace | %define parse.trace | ||||||
| 
 | 
 | ||||||
| %union { | %union { | ||||||
|  |        expr_t expr; | ||||||
|  |        binop_t binop; | ||||||
|  |        atom_t id; | ||||||
|  |        num_t num; | ||||||
|        char *sym; |        char *sym; | ||||||
|        float num; |        string_t string; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| %token <sym> ID | %token <id> ID | ||||||
| %token STOP |  | ||||||
| %token <num> NUM | %token <num> NUM | ||||||
| %token STRING | %token <string> STRING | ||||||
|  | 
 | ||||||
|  | %token STOP | ||||||
| %token INDENT DEDENT | %token INDENT DEDENT | ||||||
| %token IF ELIF ELSE | %token IF ELIF ELSE | ||||||
| 
 | 
 | ||||||
| @ -25,6 +30,8 @@ int yyerror(const char* p) { fprintf(stderr, p); } | |||||||
| %left '/' '*' | %left '/' '*' | ||||||
| %left MAPS | %left MAPS | ||||||
| 
 | 
 | ||||||
|  | %nterm <expr> expr | ||||||
|  | 
 | ||||||
| %% | %% | ||||||
| program:	statements | statements statement; | program:	statements | statements statement; | ||||||
| statements:	statements statement STOP | statements:	statements statement STOP | ||||||
| @ -41,8 +48,10 @@ expr:		funcdef | |||||||
| 		| expr '-' expr | 		| expr '-' expr | ||||||
| 		| expr '*' expr | 		| expr '*' expr | ||||||
| 		| expr '/' expr | 		| expr '/' expr | ||||||
| 		| '(' expr ')' | 		| '(' expr ')' {$$ = $2;} | ||||||
| 		| ID | NUM | STRING; | 		| ID {$$.id = $1; $$.type = ID;} | ||||||
|  | 		| NUM {$$.num = $1; $$.type = NUM;} | ||||||
|  | 		| STRING {$$.string = $1; $$.type = STRING;}; | ||||||
| 		 | 		 | ||||||
| funcdef: 	param MAPS expr | param MAPS block; | funcdef: 	param MAPS expr | param MAPS block; | ||||||
| param:	 	ID | '_' | // null production; | param:	 	ID | '_' | // null production; | ||||||
|  | |||||||
							
								
								
									
										20
									
								
								src/syntax.h
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								src/syntax.h
									
									
									
									
									
								
							| @ -1,6 +1,26 @@ | |||||||
| #ifndef SYNTAX_H | #ifndef SYNTAX_H | ||||||
| #define SYNTAX_H | #define SYNTAX_H | ||||||
| 
 | 
 | ||||||
|  | typedef float num_t; | ||||||
|  | typedef char* atom_t; | ||||||
|  | typedef char* string_t; | ||||||
|  | typedef struct expr_t expr_t; | ||||||
|  | typedef struct binop_t binop_t; | ||||||
| 
 | 
 | ||||||
|  | struct expr_t { | ||||||
|  |   int type; | ||||||
|  |   union { | ||||||
|  |     atom_t id; | ||||||
|  |     num_t num; | ||||||
|  |     string_t string; | ||||||
|  |     binop_t *binop; | ||||||
|  |   }; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | struct binop_t { | ||||||
|  |   expr_t *first; | ||||||
|  |   expr_t *second; | ||||||
|  |   int op; | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| #endif /* SYNTAX_H */ | #endif /* SYNTAX_H */ | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user