-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathrules.h
More file actions
40 lines (33 loc) · 1.33 KB
/
rules.h
File metadata and controls
40 lines (33 loc) · 1.33 KB
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
#pragma once
#include "types.h"
#include "data/format/tokenizer/tokenizer.h"
#include "semantic/semantic_rules.h"
typedef struct {
bool rule;
int value;
char *lit;
sem_action action;
int sem_value;
bool optional;
} grammar_elem;
typedef struct {
grammar_elem rules[64];
uint8_t num_elements;
} grammar_rule_opt;
typedef struct {
grammar_rule_opt options[64];
uint8_t num_elements;
sem_rule semrule;
sem_action action;
} grammar_rule;
#define TOKEN(name,opt) { false, TOK_##name, 0, sem_action_none, 0, opt }
#define RULE(name,opt) { true, rule_##name, 0, sem_action_none, 0, opt }
#define LITERAL(val,opt) { false, TOK_IDENTIFIER, val, sem_action_none, 0, opt }
#define LITTOK(tok,val,opt) { false, TOK_##tok, val, sem_action_none, 0, opt }
#define LITTAG(val,type,opt) { false, TOK_IDENTIFIER, val, sem_action_check, sem_rule_##type, opt }
#define SYMDEC(name,type,opt) { false, TOK_##name, 0, sem_action_declare, sem_elem_##type, opt }
#define SYMCHECK(name,type,opt) { false, TOK_##name, 0, sem_action_check, sem_rule_##type, opt }
#define SYMRULE(name,type,opt) { true, rule_##name, 0, sem_action_check, sem_rule_##type, opt }
#define SYMTOK(name,tag,action,type,val,opt) { false, TOK_##name, val, sem_action_##action, type##_##tag, opt }
extern grammar_rule language_rules[];
extern char* rule_names[];