blob: 72d769a900319d1058aac47679fca7d670744a6e [file] [log] [blame]
Chris Lattner8da0c282018-06-29 11:15:56 -07001//===- TokenKinds.def - MLIR Token Description ------------------*- C++ -*-===//
2//
3// Copyright 2019 The MLIR Authors.
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16// =============================================================================
17//
18// This file is intended to be #include'd multiple times to extract information
19// about tokens for various clients in the lexer.
20//
21//===----------------------------------------------------------------------===//
22
23#if !defined(TOK_MARKER) && !defined(TOK_IDENTIFIER) && !defined(TOK_LITERAL)&&\
Uday Bondhugulafaf37dd2018-06-29 18:09:29 -070024 !defined(TOK_PUNCTUATION) && !defined(TOK_OPERATOR) && !defined(TOK_KEYWORD)
Chris Lattner8da0c282018-06-29 11:15:56 -070025# error Must define one of the TOK_ macros.
26#endif
27
28#ifndef TOK_MARKER
29#define TOK_MARKER(X)
30#endif
31#ifndef TOK_IDENTIFIER
32#define TOK_IDENTIFIER(NAME)
33#endif
34#ifndef TOK_LITERAL
35#define TOK_LITERAL(NAME)
36#endif
37#ifndef TOK_PUNCTUATION
38#define TOK_PUNCTUATION(NAME, SPELLING)
39#endif
Uday Bondhugulafaf37dd2018-06-29 18:09:29 -070040#ifndef TOK_OPERATOR
41#define TOK_OPERATOR(NAME, SPELLING)
42#endif
Chris Lattner8da0c282018-06-29 11:15:56 -070043#ifndef TOK_KEYWORD
44#define TOK_KEYWORD(SPELLING)
45#endif
46
47
48// Markers
49TOK_MARKER(eof)
50TOK_MARKER(error)
51
52// Identifiers.
53TOK_IDENTIFIER(bare_identifier) // foo
54TOK_IDENTIFIER(at_identifier) // @foo
55TOK_IDENTIFIER(affine_map_identifier) // #foo
56// TODO: @@foo, etc.
57
58// Literals
59TOK_LITERAL(integer) // 42
60TOK_LITERAL(string) // "foo"
61
62// Punctuation.
63TOK_PUNCTUATION(arrow, "->")
64TOK_PUNCTUATION(colon, ":")
65TOK_PUNCTUATION(comma, ",")
66TOK_PUNCTUATION(question, "?")
67TOK_PUNCTUATION(questionquestion, "??")
68TOK_PUNCTUATION(l_paren, "(")
69TOK_PUNCTUATION(r_paren, ")")
70TOK_PUNCTUATION(l_brace, "{")
71TOK_PUNCTUATION(r_brace, "}")
Uday Bondhugulafaf37dd2018-06-29 18:09:29 -070072TOK_PUNCTUATION(l_bracket, "[")
73TOK_PUNCTUATION(r_bracket, "]")
Chris Lattner8da0c282018-06-29 11:15:56 -070074TOK_PUNCTUATION(less, "<")
75TOK_PUNCTUATION(greater, ">")
Uday Bondhugulafaf37dd2018-06-29 18:09:29 -070076TOK_PUNCTUATION(equal, "=")
Chris Lattner8da0c282018-06-29 11:15:56 -070077// TODO: More punctuation.
78
Uday Bondhugulafaf37dd2018-06-29 18:09:29 -070079// Operators.
80TOK_OPERATOR(plus, "+")
81TOK_OPERATOR(star, "*")
82TOK_OPERATOR(ceildiv, "ceildiv")
83TOK_OPERATOR(floordiv, "floordiv")
84// TODO: More operator tokens
85
Chris Lattner8da0c282018-06-29 11:15:56 -070086// Keywords. These turn "foo" into Token::kw_foo enums.
87TOK_KEYWORD(bf16)
88TOK_KEYWORD(br)
89TOK_KEYWORD(cfgfunc)
90TOK_KEYWORD(extfunc)
91TOK_KEYWORD(f16)
92TOK_KEYWORD(f32)
93TOK_KEYWORD(f64)
94TOK_KEYWORD(i1)
95TOK_KEYWORD(i16)
96TOK_KEYWORD(i32)
97TOK_KEYWORD(i64)
98TOK_KEYWORD(i8)
99TOK_KEYWORD(int)
100TOK_KEYWORD(memref)
101TOK_KEYWORD(mlfunc)
102TOK_KEYWORD(return)
103TOK_KEYWORD(tensor)
104TOK_KEYWORD(vector)
105
106#undef TOK_MARKER
107#undef TOK_IDENTIFIER
108#undef TOK_LITERAL
109#undef TOK_PUNCTUATION
Uday Bondhugulafaf37dd2018-06-29 18:09:29 -0700110#undef TOK_OPERATOR
Chris Lattner8da0c282018-06-29 11:15:56 -0700111#undef TOK_KEYWORD