blob: d2503a864d3c7cb4b8cc86cbe220f74ed36e5d70 [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.
Uday Bondhugulabc535622018-08-07 14:24:38 -070053TOK_IDENTIFIER(bare_identifier) // foo
54TOK_IDENTIFIER(at_identifier) // @foo
55TOK_IDENTIFIER(double_at_identifier) // @@foo
56TOK_IDENTIFIER(hash_identifier) // #foo
57TOK_IDENTIFIER(percent_identifier) // %foo
Chris Lattner8da0c282018-06-29 11:15:56 -070058// TODO: @@foo, etc.
59
60// Literals
Jacques Pienaar84491092018-07-31 17:15:15 -070061TOK_LITERAL(floatliteral) // 2.0
Chris Lattner8da0c282018-06-29 11:15:56 -070062TOK_LITERAL(integer) // 42
63TOK_LITERAL(string) // "foo"
Chris Lattnerf958bbe2018-06-29 22:08:05 -070064TOK_LITERAL(inttype) // i421
Chris Lattner8da0c282018-06-29 11:15:56 -070065
66// Punctuation.
67TOK_PUNCTUATION(arrow, "->")
Uday Bondhugulabc535622018-08-07 14:24:38 -070068TOK_PUNCTUATION(at, "@")
Chris Lattner8da0c282018-06-29 11:15:56 -070069TOK_PUNCTUATION(colon, ":")
70TOK_PUNCTUATION(comma, ",")
71TOK_PUNCTUATION(question, "?")
72TOK_PUNCTUATION(questionquestion, "??")
73TOK_PUNCTUATION(l_paren, "(")
74TOK_PUNCTUATION(r_paren, ")")
75TOK_PUNCTUATION(l_brace, "{")
76TOK_PUNCTUATION(r_brace, "}")
Chris Lattner85ee1512018-07-25 11:15:20 -070077TOK_PUNCTUATION(l_square, "[")
78TOK_PUNCTUATION(r_square, "]")
Chris Lattner8da0c282018-06-29 11:15:56 -070079TOK_PUNCTUATION(less, "<")
80TOK_PUNCTUATION(greater, ">")
Uday Bondhugulafaf37dd2018-06-29 18:09:29 -070081TOK_PUNCTUATION(equal, "=")
Chris Lattner8da0c282018-06-29 11:15:56 -070082// TODO: More punctuation.
83
Uday Bondhugulafaf37dd2018-06-29 18:09:29 -070084// Operators.
85TOK_OPERATOR(plus, "+")
Uday Bondhugula015cbb12018-07-03 20:16:08 -070086TOK_OPERATOR(minus, "-")
Uday Bondhugulafaf37dd2018-06-29 18:09:29 -070087TOK_OPERATOR(star, "*")
Uday Bondhugulafaf37dd2018-06-29 18:09:29 -070088// TODO: More operator tokens
89
Chris Lattner8da0c282018-06-29 11:15:56 -070090// Keywords. These turn "foo" into Token::kw_foo enums.
Chris Lattnerf958bbe2018-06-29 22:08:05 -070091TOK_KEYWORD(affineint)
Chris Lattner8da0c282018-06-29 11:15:56 -070092TOK_KEYWORD(bf16)
93TOK_KEYWORD(br)
Chris Lattner7121b802018-07-04 20:45:39 -070094TOK_KEYWORD(ceildiv)
Chris Lattner8da0c282018-06-29 11:15:56 -070095TOK_KEYWORD(cfgfunc)
James Molloy4f788372018-07-24 15:01:27 -070096TOK_KEYWORD(cond_br)
Tatiana Shpeismanbf079c92018-07-03 17:51:28 -070097TOK_KEYWORD(else)
Chris Lattner8da0c282018-06-29 11:15:56 -070098TOK_KEYWORD(extfunc)
99TOK_KEYWORD(f16)
100TOK_KEYWORD(f32)
101TOK_KEYWORD(f64)
Chris Lattner7121b802018-07-04 20:45:39 -0700102TOK_KEYWORD(false)
103TOK_KEYWORD(floordiv)
Tatiana Shpeismanbf079c92018-07-03 17:51:28 -0700104TOK_KEYWORD(for)
105TOK_KEYWORD(if)
Tatiana Shpeismande8829f2018-08-24 23:38:14 -0700106TOK_KEYWORD(max)
Chris Lattner8da0c282018-06-29 11:15:56 -0700107TOK_KEYWORD(memref)
Tatiana Shpeismande8829f2018-08-24 23:38:14 -0700108TOK_KEYWORD(min)
Chris Lattner8da0c282018-06-29 11:15:56 -0700109TOK_KEYWORD(mlfunc)
Chris Lattner7121b802018-07-04 20:45:39 -0700110TOK_KEYWORD(mod)
Chris Lattner8da0c282018-06-29 11:15:56 -0700111TOK_KEYWORD(return)
Uday Bondhugula0115dbb2018-07-11 21:31:07 -0700112TOK_KEYWORD(size)
Tatiana Shpeisman1da50c42018-07-19 09:52:39 -0700113TOK_KEYWORD(step)
Chris Lattner8da0c282018-06-29 11:15:56 -0700114TOK_KEYWORD(tensor)
Jacques Pienaarc0d69302018-07-27 11:07:12 -0700115TOK_KEYWORD(tf_control)
James Molloy72b0cbe2018-08-01 12:55:27 -0700116TOK_KEYWORD(tf_string)
Tatiana Shpeisman1da50c42018-07-19 09:52:39 -0700117TOK_KEYWORD(to)
Chris Lattner7121b802018-07-04 20:45:39 -0700118TOK_KEYWORD(true)
Chris Lattner8da0c282018-06-29 11:15:56 -0700119TOK_KEYWORD(vector)
120
121#undef TOK_MARKER
122#undef TOK_IDENTIFIER
123#undef TOK_LITERAL
124#undef TOK_PUNCTUATION
Uday Bondhugulafaf37dd2018-06-29 18:09:29 -0700125#undef TOK_OPERATOR
Chris Lattner8da0c282018-06-29 11:15:56 -0700126#undef TOK_KEYWORD