1/*---------------------------------------------------------------------------*
2 *  SR_SemprocDefinitions.h  *
3 *                                                                           *
4 *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
5 *                                                                           *
6 *  Licensed under the Apache License, Version 2.0 (the 'License');          *
7 *  you may not use this file except in compliance with the License.         *
8 *                                                                           *
9 *  You may obtain a copy of the License at                                  *
10 *      http://www.apache.org/licenses/LICENSE-2.0                           *
11 *                                                                           *
12 *  Unless required by applicable law or agreed to in writing, software      *
13 *  distributed under the License is distributed on an 'AS IS' BASIS,        *
14 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
15 *  See the License for the specific language governing permissions and      *
16 *  limitations under the License.                                           *
17 *                                                                           *
18 *---------------------------------------------------------------------------*/
19
20#ifndef __SR_SEMPROCDEFINITIONS_H
21#define __SR_SEMPROCDEFINITIONS_H
22
23
24
25#include "ptypes.h"
26#include "pstdio.h"
27
28/**
29 * Whether to display verbose error message when parse fails.
30 */
31#define SEMPROC_VERBOSE_PARSE_ERROR 1
32
33/**
34* Max number of semantic results
35*/
36#define MAX_SEM_RESULTS         1
37
38/**
39 * Maximum number of symbols allowed in the Symbol table when parsing a single script
40 */
41#define MAX_SYMBOLS            40
42
43/**
44 * Maximum number of special symbols allowed in the Symbol table set before parsing and read during
45 */
46#define MAX_SPECIAL_SYMBOLS     1
47
48
49/**
50 * Maximum size of strings
51 */
52#define MAX_STRING_LEN        350
53
54/**
55 * Maximum length of accumulated scripts
56 */
57#define MAX_SCRIPT_LEN       8192
58
59/**
60 * Maximum number of identifiers allowed on the RHS of equal sign
61 */
62#define MAX_RHS_IDENTIFIERS    10
63
64/**
65 * Maximum number of function callbacks the may be registered
66 * fix: 2004-05-20, this was limiting the number of concurrently
67 * loaded grammars, now patched but source problem not repaired
68 */
69#define MAX_FUNCTION_CALLBACKS 32
70
71/**
72 * Max depth of a graph (tokens including scope markers, scripts, words etc)
73 */
74#define MAX_SEM_GRAPH_DEPTH       128
75
76/**
77 * Maximum number of partial paths which will be used when parsing
78 */
79#define MAX_SEM_PARTIAL_PATHS     512
80
81/**
82 * Maximum number of tokens encountered on all partial paths combined
83 */
84#define MAX_PATH_OLABELS          2048
85
86/**
87 * Maximum number of scripts accumulated on a path through grammar
88 */
89#define MAX_SCRIPTS                512
90
91/**
92 * Offset used for denoting scripts (since integer used as label in graph)
93 */
94#define SEMGRAPH_SCRIPT_OFFSET  30000
95
96/**
97 * Offset used for denoting scope markers (since integer used as label in graph)
98 */
99#define SEMGRAPH_SCOPE_OFFSET   40000
100
101/**
102 * Assignment operator
103 */
104#define OP_ASSIGN        L('=')
105
106/**
107 * String concatenation operator
108 */
109#define OP_CONCAT        L('+')
110
111/**
112 * Left bracket
113 */
114#define LBRACKET         L('(')
115
116/**
117 * Delimiter for parameters in a function call
118 */
119#define PARAM_DELIM      L(',')
120
121/**
122 * Right bracket
123 */
124#define RBRACKET         L(')')
125
126/**
127 * Question mark used in conditional expressions to signify end of condition part
128 */
129#define OP_CONDITION_IFTRUE  L('?')
130
131/**
132 * Colon used in conditional expressions to signify the alternative (false) return value
133 */
134#define OP_CONDITION_ELSE    L(':')
135
136/**
137 * End of statement operator
138 */
139#define EO_STATEMENT     L(';')
140
141/**
142 * Delimiter for constant string identifiers
143 */
144#define STRING_DELIM     L('\'')
145
146/**
147 * Dot used for rule property referencing
148 */
149#define DOT              L('.')
150
151/**
152 * Underscore sometimes used in identifiers
153 */
154#define USCORE           L('_')
155
156/**
157 * Newline character
158 */
159#define NL               L('\n')
160
161/**
162 * End of string character
163 */
164#define EO_STRING        L('\0')
165
166/**
167 * Escape character.
168 **/
169#define ESC_CHAR L('\\')
170/**
171 * CHAR used for joining (union) multiple meanings for same word
172 */
173#define MULTIPLE_MEANING_JOIN_CHAR L('#')
174
175/**
176 * String used for undefined string variables
177 */
178#define UNDEFINED_SYMBOL L("undefined")
179
180/**
181 * Boolean symbol true
182 */
183#define TRUE_SYMBOL      L("true")
184
185/**
186* Boolean symbol false
187*/
188#define FALSE_SYMBOL     L("false")
189
190/**
191 * markers
192 */
193#define BEGIN_SCOPE_MARKER L('{')
194#define END_SCOPE_MARKER   L('}')
195#define IS_BEGIN_SCOPE(wW) (wW[0] == BEGIN_SCOPE_MARKER && wW[1] == 0)
196#define IS_END_SCOPE(wW) ((_tMp=LSTRCHR(wW,END_SCOPE_MARKER))!=0 && _tMp[1]==0)
197#define IS_SCOPE_MARKER(wW) ( IS_BEGIN_SCOPE(wW) || IS_END_SCOPE(wW))
198#define IS_SCRIPT_MARKER(wW) (wW[0] == '_' && isnum(&wW[1]))
199#define IS_OPERATOR(p) ((*p)==','|| (*p)=='+' || (*p)=='=' || (*p)=='(' || (*p)==')' || (*p)==':' || (*p)=='?')
200#define IS_LOCAL_IDENTIFIER(p, len) ( (*p)!=';' && !IS_OPERATOR(p) && *p!='\'' && !LSTRNCHR2(p,'.','(',len))
201
202
203/**
204 * This macro checks if memory allocation is possible (against internal limit values)
205 * and returns ESR_OUT_OF_MEMORY otherwise.
206 */
207#define MEMCHK(rc, val, threshold) \
208  do { \
209    if(val > threshold) \
210    { \
211      rc = ESR_OUT_OF_MEMORY; \
212      PLogError(L("%s: %d > %d\n"), ESR_rc2str(rc), (val), (threshold)); \
213      goto CLEANUP; \
214    } \
215  } while(0);
216#define LENCHK(rc, val, threshold) \
217  do { \
218    if(LSTRLEN(val) > threshold) \
219    { \
220      rc = ESR_OUT_OF_MEMORY; \
221      PLogError(L("%s: %s > %d\n"), ESR_rc2str(rc), (val), (threshold)); \
222      goto CLEANUP; \
223    } \
224  } while(0);
225
226/**
227 * Base 10 used for ITOA macro
228 */
229#define BASE_10 10
230
231#endif /* __DEFINTIONS_H */
232