2 * Copyright (c) 2015 Cisco and/or its affiliates.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
15 #ifndef included_vlib_lex_h
16 #define included_vlib_lex_h
18 #include <vppinfra/hash.h>
19 #include <vppinfra/bitmap.h>
20 #include <vppinfra/error.h>
21 #include <vppinfra/pool.h>
23 #define foreach_vlib_lex_global_token \
42 #define _(f) VLIB_LEX_##f,
43 foreach_vlib_lex_global_token
45 } vlib_lex_global_token_t;
50 VLIB_LEX_ADD_TO_TOKEN,
52 VLIB_LEX_RETURN_AND_RESCAN,
53 VLIB_LEX_KEYWORD_CHECK,
54 VLIB_LEX_START_NUMBER,
55 VLIB_LEX_ADD_TO_NUMBER,
63 } vlib_lex_table_entry_t;
68 vlib_lex_table_entry_t entries[128];
85 vlib_lex_table_t *lex_tables;
86 uword *lex_tables_by_name;
88 /* Vector of token strings. */
89 char **lex_token_names;
91 /* Hash mapping c string name to token index. */
92 uword *lex_tokens_by_name;
94 /* Hash mapping c string keyword name to token index. */
97 vlib_lex_token_t *pushback_vector;
101 u32 current_table_index;
103 uword current_token_value;
105 uword current_number_base;
107 /* Input string we are lex-ing. */
110 /* Current index into input vector. */
113 /* Re-used vector for forming token strings and hashing them. */
117 extern vlib_lex_main_t vlib_lex_main;
120 vlib_lex_cleanup_token (vlib_lex_token_t * t)
122 if (t->token == VLIB_LEX_word)
124 u8 *tv = t->value.as_pointer;
129 u16 vlib_lex_add_table (char *name);
130 void vlib_lex_get_token (vlib_lex_main_t * lm, vlib_lex_token_t * result);
131 u16 vlib_lex_add_token (vlib_lex_main_t * lm, char *token_name);
132 void vlib_lex_set_action_range (u32 table_index, u8 lo, u8 hi, u16 action,
133 u16 token, u32 next_table_index);
134 void vlib_lex_reset (vlib_lex_main_t * lm, u8 * input_vector);
135 format_function_t format_vlib_lex_token;
137 #endif /* included_vlib_lex_h */
140 * fd.io coding-style-patch-verification: ON
143 * eval: (c-set-style "gnu")