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 \
41 #define _(f) VLIB_LEX_##f,
42 foreach_vlib_lex_global_token
44 } vlib_lex_global_token_t;
48 VLIB_LEX_ADD_TO_TOKEN,
50 VLIB_LEX_RETURN_AND_RESCAN,
51 VLIB_LEX_KEYWORD_CHECK,
52 VLIB_LEX_START_NUMBER,
53 VLIB_LEX_ADD_TO_NUMBER,
60 } vlib_lex_table_entry_t;
64 vlib_lex_table_entry_t entries [128];
78 vlib_lex_table_t * lex_tables;
79 uword * lex_tables_by_name;
81 /* Vector of token strings. */
82 char ** lex_token_names;
84 /* Hash mapping c string name to token index. */
85 uword * lex_tokens_by_name;
87 /* Hash mapping c string keyword name to token index. */
90 vlib_lex_token_t * pushback_vector;
94 u32 current_table_index;
96 uword current_token_value;
98 uword current_number_base;
100 /* Input string we are lex-ing. */
103 /* Current index into input vector. */
106 /* Re-used vector for forming token strings and hashing them. */
110 vlib_lex_main_t vlib_lex_main;
113 vlib_lex_cleanup_token (vlib_lex_token_t * t)
115 if (t->token == VLIB_LEX_word)
117 u8 * tv = t->value.as_pointer;
122 u16 vlib_lex_add_table (char *name);
123 void vlib_lex_get_token (vlib_lex_main_t *lm, vlib_lex_token_t * result);
124 u16 vlib_lex_add_token (vlib_lex_main_t *lm, char *token_name);
125 void vlib_lex_set_action_range (u32 table_index, u8 lo, u8 hi, u16 action,
126 u16 token, u32 next_table_index);
127 void vlib_lex_reset (vlib_lex_main_t *lm, u8 *input_vector);
128 format_function_t format_vlib_lex_token;
130 #endif /* included_vlib_lex_h */