aboutsummaryrefslogtreecommitdiff
path: root/src/as_parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/as_parser.h')
-rw-r--r--src/as_parser.h24
1 files changed, 7 insertions, 17 deletions
diff --git a/src/as_parser.h b/src/as_parser.h
index 268f45a..3306909 100644
--- a/src/as_parser.h
+++ b/src/as_parser.h
@@ -1,31 +1,20 @@
+#ifndef FVM_AS_PARSER_H_
+#define FVM_AS_PARSER_H_
+
#include "as_tokenizer.h"
-// BNF
-// ===
-//
-// <prog> ::= <stmts>
-// <stmts> ::= <stmt> <newline> | <stmt> <stmts>
-// <stmt> ::= <tag> <instr> | <instr> | <tag>
-// <instr> ::= <op> | <op> <arg> | <op> <label>
-// <tag> ::= <label> :
-// <op> ::= add | sub | mul | div | mod | eq
-
-enum op {
- ADD, SUB, MUL, DIV, MOD, EQ
-};
-typedef enum op Op;
+#include "as_op.h"
struct arg {
int64_t ival;
double fval;
- const char *sval;
};
typedef struct arg Arg;
struct instr {
Op op;
Arg* arg;
- const char* labelName;
+ const char* tagName;
};
typedef struct instr Instr;
@@ -35,7 +24,7 @@ struct label {
typedef struct label Label;
struct stmt {
- Label* tag;
+ Label* label;
Instr* instr;
};
typedef struct stmt Stmt;
@@ -57,3 +46,4 @@ Instr* parseInstr(TokenStream *ts);
Label* parseLabel(TokenStream *ts);
Op parseOp(TokenStream *ts);
+#endif