small renaming
This commit is contained in:
parent
16e8ec36e1
commit
b5426dcc3f
7 changed files with 34 additions and 33 deletions
|
|
@ -6,7 +6,7 @@ typedef struct {
|
||||||
unsigned length;
|
unsigned length;
|
||||||
} Array;
|
} Array;
|
||||||
|
|
||||||
typedef struct Expr {
|
typedef struct {
|
||||||
enum {
|
enum {
|
||||||
LITERAL,
|
LITERAL,
|
||||||
VARIABLE,
|
VARIABLE,
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "lexer.h"
|
|
||||||
#include "parser.h"
|
|
||||||
#include "execute.h"
|
|
||||||
#include "ast.h"
|
#include "ast.h"
|
||||||
|
#include "lex.h"
|
||||||
|
#include "parse.h"
|
||||||
|
#include "execute.h"
|
||||||
|
|
||||||
void run(char* code, unsigned length) {
|
void run(char* code, unsigned length) {
|
||||||
TokenArray tokens = scan(code, length);
|
TokenArray tokens = lex(code, length);
|
||||||
|
|
||||||
puts("Tokens:\n");
|
puts("Tokens:\n");
|
||||||
print_TokenArray(tokens);
|
print_TokenArray(tokens);
|
||||||
puts("\n");
|
puts("\n");
|
||||||
|
|
||||||
StmtArray program = parse_program(tokens);
|
StmtArray program = parse(tokens);
|
||||||
|
|
||||||
puts("\nProgram:\n");
|
puts("\nProgram:\n");
|
||||||
print_ast(program);
|
print_ast(program);
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,11 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "lexer.h"
|
#include "lex.h"
|
||||||
|
|
||||||
TokenArray scan(char* txt, unsigned length) {
|
int is_identifier_char(char);
|
||||||
|
int is_numeric(char);
|
||||||
|
|
||||||
|
TokenArray lex(char* txt, unsigned length) {
|
||||||
unsigned txt_index = 0;
|
unsigned txt_index = 0;
|
||||||
Token* tokens = (Token*)malloc(length * sizeof(Token));
|
Token* tokens = (Token*)malloc(length * sizeof(Token));
|
||||||
unsigned tokens_index = 0;
|
unsigned tokens_index = 0;
|
||||||
|
|
@ -53,10 +56,10 @@ TokenArray scan(char* txt, unsigned length) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
if (is_alpha(txt[txt_index])) {
|
if (is_identifier_char(txt[txt_index])) {
|
||||||
char* word = malloc(128);
|
char* word = malloc(128);
|
||||||
unsigned word_index = 0;
|
unsigned word_index = 0;
|
||||||
while (txt_index < length && txt[txt_index] != '\0' && is_alpha(txt[txt_index]) && word_index < 128) {
|
while (txt_index < length && txt[txt_index] != '\0' && is_identifier_char(txt[txt_index]) && word_index < 128) {
|
||||||
word[word_index] = txt[txt_index];
|
word[word_index] = txt[txt_index];
|
||||||
++word_index;
|
++word_index;
|
||||||
++txt_index;
|
++txt_index;
|
||||||
|
|
@ -84,7 +87,7 @@ TokenArray scan(char* txt, unsigned length) {
|
||||||
return (TokenArray){ .tokens = tokens, .length = tokens_index };
|
return (TokenArray){ .tokens = tokens, .length = tokens_index };
|
||||||
}
|
}
|
||||||
|
|
||||||
int is_alpha(char c) {
|
int is_identifier_char(char c) {
|
||||||
return c == '_' || ('a' <= c && c <= 'z');
|
return c == '_' || ('a' <= c && c <= 'z');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -99,28 +102,28 @@ void print_TokenArray(TokenArray tokens) {
|
||||||
++token_index;
|
++token_index;
|
||||||
switch (token.tag) {
|
switch (token.tag) {
|
||||||
case IDENTIFIER:
|
case IDENTIFIER:
|
||||||
printf("'%s' ", token.data.identifier);
|
printf("IDENTIFIER '%s'\n", token.data.identifier);
|
||||||
break;
|
break;
|
||||||
case INTEGER:
|
case INTEGER:
|
||||||
printf("%d ", token.data.integer);
|
printf("NUMBER %d\n", token.data.integer);
|
||||||
break;
|
break;
|
||||||
case OPENPAREN:
|
case OPENPAREN:
|
||||||
printf("( ");
|
printf("OPENPAREN\n");
|
||||||
break;
|
break;
|
||||||
case CLOSEPAREN:
|
case CLOSEPAREN:
|
||||||
printf(") ");
|
printf("CLOSEPAREN\n");
|
||||||
break;
|
break;
|
||||||
case OPENCURLY:
|
case OPENCURLY:
|
||||||
printf("{ ");
|
printf("OPENCURLY\n");
|
||||||
break;
|
break;
|
||||||
case CLOSECURLY:
|
case CLOSECURLY:
|
||||||
printf("} ");
|
printf("CLOSECURLY\n");
|
||||||
break;
|
break;
|
||||||
case EQUALS:
|
case EQUALS:
|
||||||
printf("= ");
|
printf("EQUALS\n");
|
||||||
break;
|
break;
|
||||||
case COMMA:
|
case COMMA:
|
||||||
printf(", ");
|
printf("COMMA\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -25,9 +25,7 @@ typedef struct {
|
||||||
unsigned length;
|
unsigned length;
|
||||||
} TokenArray;
|
} TokenArray;
|
||||||
|
|
||||||
TokenArray scan(char*, unsigned);
|
TokenArray lex(char*, unsigned);
|
||||||
int is_alpha(char);
|
|
||||||
int is_numeric(char);
|
|
||||||
|
|
||||||
void print_TokenArray(TokenArray);
|
void print_TokenArray(TokenArray);
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#include "parser.h"
|
#include "parse.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
@ -154,7 +154,7 @@ StmtArray parse_block(TokenArray tokens, unsigned* tokens_index) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
StmtArray parse_program(TokenArray tokens) {
|
StmtArray parse(TokenArray tokens) {
|
||||||
unsigned tokens_index = 0;
|
unsigned tokens_index = 0;
|
||||||
unsigned stmt_index = 0;
|
unsigned stmt_index = 0;
|
||||||
Stmt* stmts = (Stmt*)malloc(tokens.length * sizeof(Stmt));
|
Stmt* stmts = (Stmt*)malloc(tokens.length * sizeof(Stmt));
|
||||||
9
first-interpreter/src/parse.h
Normal file
9
first-interpreter/src/parse.h
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
#ifndef PARSER_H
|
||||||
|
#define PARSER_H
|
||||||
|
|
||||||
|
#include "ast.h"
|
||||||
|
#include "lex.h"
|
||||||
|
|
||||||
|
StmtArray parse(TokenArray tokens);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
#ifndef PARSER_H
|
|
||||||
#define PARSER_H
|
|
||||||
|
|
||||||
#include "lexer.h"
|
|
||||||
#include "ast.h"
|
|
||||||
|
|
||||||
StmtArray parse_program(TokenArray tokens);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
Loading…
Add table
Reference in a new issue