Loading...
Searching...
No Matches
token.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2003-2023, John Wiegley. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of New Artisans LLC nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
42#pragma once
43
44#include "expr.h"
45
46namespace ledger {
47
48struct expr_t::token_t : public noncopyable
49{
50 enum kind_t {
51 ERROR, // an error occurred while tokenizing
52 VALUE, // any kind of literal value
53 IDENT, // [A-Za-z_]+
54 MASK, // /regexp/
55
56 LPAREN, // (
57 RPAREN, // )
58 LBRACE, // {
59 RBRACE, // }
60
61 EQUAL, // ==
62 NEQUAL, // !=
63 LESS, // <
64 LESSEQ, // <=
65 GREATER, // >
66 GREATEREQ, // >=
67
68 ASSIGN, // =
69 MATCH, // =~
70 NMATCH, // !~
71 MINUS, // -
72 PLUS, // +
73 STAR, // *
74 SLASH, // /
75 ARROW, // ->
76 KW_DIV, // div
77
78 EXCLAM, // !, not
79 KW_AND, // &, &&, and
80 KW_OR, // |, ||, or
81 KW_MOD, // %
82
83 KW_IF, // if
84 KW_ELSE, // else
85
86 QUERY, // ?
87 COLON, // :
88
89 DOT, // .
90 COMMA, // ,
91 SEMI, // ;
92
95
97
98 char symbol[6];
100 std::size_t length;
101
102 explicit token_t() : kind(UNKNOWN), length(0) {
104 }
108
110 if (&other == this)
111 return *this;
112 assert(false); // only one token object is used at a time
113 return *this;
114 }
115
116 void clear() {
117 kind = UNKNOWN;
118 length = 0;
120 symbol[0] = '\0';
121 }
122
123 int parse_reserved_word(std::istream& in);
124 void parse_ident(std::istream& in);
125 void next(std::istream& in, const parse_flags_t& flags);
126 void rewind(std::istream& in);
127 void unexpected(const char wanted = '\0');
128 void expected(const char wanted, const int c);
129 void expected(const kind_t wanted);
130};
131
132std::ostream& operator<<(std::ostream& out, const expr_t::token_t::kind_t& kind);
133std::ostream& operator<<(std::ostream& out, const expr_t::token_t& token);
134
135} // namespace ledger
#define TRACE_DTOR(cls)
Definition utils.h:144
#define TRACE_CTOR(cls, args)
Definition utils.h:143
#define assert(x)
Definition utils.h:92
#define NULL_VALUE
Definition value.h:947
std::ostream & operator<<(std::ostream &out, const account_t &account)
T & downcast(U &object)
Definition utils.h:468
int parse_reserved_word(std::istream &in)
void unexpected(const char wanted='\0')
void next(std::istream &in, const parse_flags_t &flags)
void parse_ident(std::istream &in)
std::size_t length
Definition token.h:100
void expected(const char wanted, const int c)
token_t & operator=(const token_t &other)
Definition token.h:109
enum ledger::expr_t::token_t::kind_t kind
void rewind(std::istream &in)
void expected(const kind_t wanted)
Dynamic type representing various numeric types.
Definition value.h:83