nixd
Loading...
Searching...
No Matches
Tokens.h.py
Go to the documentation of this file.
1import tokens
2
3
4def tok_id(tok: tokens.Token):
5 prefix = "tok"
6 if isinstance(tok, tokens.KwToken):
7 return f"{prefix}_kw_{tok.name}"
8 if isinstance(tok, tokens.OpToken):
9 return f"{prefix}_op_{tok.name}"
10 return f"{prefix}_{tok.name}"
11
12
13def generate_tokens_h() -> str:
14 header = """#pragma once
15
16#include <string_view>
17
18namespace nixf::tok {
19
20enum TokenKind {
21"""
22 for token in tokens.tokens:
23 header += f" {tok_id(token)},\n"
24
25 header += "};\n\n"
26
27 header += """constexpr std::string_view spelling(int Kind) {
28 using namespace std::literals;
29 switch (Kind) {
30"""
31
32 for token in tokens.tokens:
33 header += f' case {tok_id(token)}: return R"({token.spelling})"sv;\n'
34
35 header += """ default: return ""sv;
36 }
37}
38"""
39
40 header += "} // namespace nixf::tok"
41
42 return header
43
44
45if __name__ == "__main__":
46 import sys
47
48 with open(sys.argv[1], "w") as f:
49 f.write(generate_tokens_h())
str generate_tokens_h()
Definition Tokens.h.py:13
tok_id(tokens.Token tok)
Definition Tokens.h.py:4