blob: 133448dba2825c7496ce61460b241f3ac3190b53 [file] [log] [blame]
/*---------------------------------------------------------------------------*
* SR_SemprocDefinitions.h *
* *
* Copyright 2007, 2008 Nuance Communciations, Inc. *
* *
* Licensed under the Apache License, Version 2.0 (the 'License'); *
* you may not use this file except in compliance with the License. *
* *
* You may obtain a copy of the License at *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an 'AS IS' BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License for the specific language governing permissions and *
* limitations under the License. *
* *
*---------------------------------------------------------------------------*/
#ifndef __SR_SEMPROCDEFINITIONS_H
#define __SR_SEMPROCDEFINITIONS_H
#include "ptypes.h"
#include "pstdio.h"
/**
* Whether to display verbose error message when parse fails.
*/
#define SEMPROC_VERBOSE_PARSE_ERROR 1
/**
* Max number of semantic results
*/
#define MAX_SEM_RESULTS 1
/**
* Maximum number of symbols allowed in the Symbol table when parsing a single script
*/
#define MAX_SYMBOLS 40
/**
* Maximum number of special symbols allowed in the Symbol table set before parsing and read during
*/
#define MAX_SPECIAL_SYMBOLS 1
/**
* Maximum size of strings
*/
#define MAX_STRING_LEN 700
/**
* Maximum length of accumulated scripts
*/
#define MAX_SCRIPT_LEN 8192
/**
* Maximum number of identifiers allowed on the RHS of equal sign
*/
#define MAX_RHS_IDENTIFIERS 10
/**
* Maximum number of function callbacks the may be registered
* fix: 2004-05-20, this was limiting the number of concurrently
* loaded grammars, now patched but source problem not repaired
*/
#define MAX_FUNCTION_CALLBACKS 32
/**
* Max depth of a graph (tokens including scope markers, scripts, words etc)
*/
#define MAX_SEM_GRAPH_DEPTH 128
/**
* Maximum number of partial paths which will be used when parsing
*/
#define MAX_SEM_PARTIAL_PATHS 512
/**
* Maximum number of tokens encountered on all partial paths combined
*/
#define MAX_PATH_OLABELS 2048
/**
* Maximum number of scripts accumulated on a path through grammar
*/
#define MAX_SCRIPTS 512
/**
* Offset used for denoting scripts (since integer used as label in graph)
*/
#define SEMGRAPH_SCRIPT_OFFSET 30000
/**
* Offset used for denoting scope markers (since integer used as label in graph)
*/
#define SEMGRAPH_SCOPE_OFFSET 40000
/**
* Assignment operator
*/
#define OP_ASSIGN L('=')
/**
* String concatenation operator
*/
#define OP_CONCAT L('+')
/**
* Left bracket
*/
#define LBRACKET L('(')
/**
* Delimiter for parameters in a function call
*/
#define PARAM_DELIM L(',')
/**
* Right bracket
*/
#define RBRACKET L(')')
/**
* Question mark used in conditional expressions to signify end of condition part
*/
#define OP_CONDITION_IFTRUE L('?')
/**
* Colon used in conditional expressions to signify the alternative (false) return value
*/
#define OP_CONDITION_ELSE L(':')
/**
* End of statement operator
*/
#define EO_STATEMENT L(';')
/**
* Delimiter for constant string identifiers
*/
#define STRING_DELIM L('\'')
/**
* Dot used for rule property referencing
*/
#define DOT L('.')
/**
* Underscore sometimes used in identifiers
*/
#define USCORE L('_')
/**
* Newline character
*/
#define NL L('\n')
/**
* End of string character
*/
#define EO_STRING L('\0')
/**
* Escape character.
**/
#define ESC_CHAR L('\\')
/**
* CHAR used for joining (union) multiple meanings for same word
*/
#define MULTIPLE_MEANING_JOIN_CHAR L('#')
/**
* String used for undefined string variables
*/
#define UNDEFINED_SYMBOL L("undefined")
/**
* Boolean symbol true
*/
#define TRUE_SYMBOL L("true")
/**
* Boolean symbol false
*/
#define FALSE_SYMBOL L("false")
/**
* markers
*/
#define BEGIN_SCOPE_MARKER L('{')
#define END_SCOPE_MARKER L('}')
#define IS_BEGIN_SCOPE(wW) (wW[0] == BEGIN_SCOPE_MARKER && wW[1] == 0)
#define IS_END_SCOPE(wW) ((_tMp=LSTRCHR(wW,END_SCOPE_MARKER))!=0 && _tMp[1]==0)
#define IS_SCOPE_MARKER(wW) ( IS_BEGIN_SCOPE(wW) || IS_END_SCOPE(wW))
#define IS_SCRIPT_MARKER(wW) (wW[0] == '_' && isnum(&wW[1]))
#define IS_OPERATOR(p) ((*p)==','|| (*p)=='+' || (*p)=='=' || (*p)=='(' || (*p)==')' || (*p)==':' || (*p)=='?')
#define IS_LOCAL_IDENTIFIER(p, len) ( (*p)!=';' && !IS_OPERATOR(p) && *p!='\'' && !LSTRNCHR2(p,'.','(',len))
/**
* This macro checks if memory allocation is possible (against internal limit values)
* and returns ESR_OUT_OF_MEMORY otherwise.
*/
#define MEMCHK(rc, val, threshold) \
do { \
if(val > threshold) \
{ \
rc = ESR_OUT_OF_MEMORY; \
PLogError(L("%s: %d > %d\n"), ESR_rc2str(rc), (val), (threshold)); \
goto CLEANUP; \
} \
} while(0);
#define LENCHK(rc, val, threshold) \
do { \
if(LSTRLEN(val) > threshold) \
{ \
rc = ESR_OUT_OF_MEMORY; \
PLogError(L("%s: %s > %d\n"), ESR_rc2str(rc), (val), (threshold)); \
goto CLEANUP; \
} \
} while(0);
/**
* Base 10 used for ITOA macro
*/
#define BASE_10 10
#endif /* __DEFINTIONS_H */