aboutsummaryrefslogtreecommitdiffstats
path: root/pbx
diff options
context:
space:
mode:
Diffstat (limited to 'pbx')
-rw-r--r--pbx/ael/ael.flex11
-rw-r--r--pbx/ael/ael_lex.c180
2 files changed, 107 insertions, 84 deletions
diff --git a/pbx/ael/ael.flex b/pbx/ael/ael.flex
index f1c23d17b..4e7a60228 100644
--- a/pbx/ael/ael.flex
+++ b/pbx/ael/ael.flex
@@ -35,6 +35,14 @@
%option prefix="ael_yy"
%option noyywrap
+/* I specify this option to suppress flex generating code with ECHO
+ in it. This generates compiler warnings in some systems; We've
+ seen the fwrite generate Unused variable warnings with 4.1.2 gcc.
+ Some systems have tweaked flex ECHO macro to keep the compiler
+ happy. To keep the warning message from getting output, I added
+ a default rule at the end of the patterns section */
+%option nodefault
+
/* yyfree normally just frees its arg. It can be null sometimes,
which some systems will complain about, so, we'll define our own version */
%option noyyfree
@@ -282,6 +290,7 @@ includes { STORE_POS; return KW_INCLUDES;}
yymore();
}
}
+
<wordstate>[-a-zA-Z0-9'"_/.\<\>\*\+!$#\[\]] { yymore(); /* Keep going */ }
<wordstate>(\\.) { yymore(); /* Keep Going */ }
<wordstate>(\$\{) { /* the beginning of a ${} construct. prepare and pop into curlystate */
@@ -632,6 +641,8 @@ includes { STORE_POS; return KW_INCLUDES;}
}
}
+<*>.|\n { /* default rule */ ast_log(LOG_ERROR,"Unhandled char(s): %s\n", yytext); }
+
%%
static void pbcpush(char x)
diff --git a/pbx/ael/ael_lex.c b/pbx/ael/ael_lex.c
index 172d2f5d2..94f95e03a 100644
--- a/pbx/ael/ael_lex.c
+++ b/pbx/ael/ael_lex.c
@@ -352,8 +352,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
-#define YY_NUM_RULES 73
-#define YY_END_OF_BUFFER 74
+#define YY_NUM_RULES 74
+#define YY_END_OF_BUFFER 75
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -364,7 +364,7 @@ struct yy_trans_info
static yyconst flex_int16_t yy_accept[284] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 42, 42,
- 0, 0, 0, 0, 0, 0, 74, 73, 49, 47,
+ 0, 0, 0, 0, 0, 0, 75, 73, 49, 47,
48, 50, 50, 50, 9, 3, 4, 7, 50, 8,
5, 6, 12, 73, 50, 50, 50, 50, 50, 50,
50, 50, 50, 50, 50, 50, 50, 50, 50, 50,
@@ -797,6 +797,12 @@ static yyconst flex_int16_t yy_chk[1073] =
* This renames also ael_yywrap, but since we do not use it, we just
* add option noyywrap to remove it.
*/
+/* I specify this option to suppress flex generating code with ECHO
+ in it. This generates compiler warnings in some systems; We've
+ seen the fwrite generate Unused variable warnings with 4.1.2 gcc.
+ Some systems have tweaked flex ECHO macro to keep the compiler
+ happy. To keep the warning message from getting output, I added
+ a default rule at the end of the patterns section */
/* ael_yyfree normally just frees its arg. It can be null sometimes,
which some systems will complain about, so, we'll define our own version */
/* batch gives a bit more performance if we are using it in
@@ -811,7 +817,7 @@ static yyconst flex_int16_t yy_chk[1073] =
* bison-bridge passes an additional yylval argument to ael_yylex().
* bison-locations is probably not needed.
*/
-#line 63 "ael.flex"
+#line 71 "ael.flex"
#if !defined(STANDALONE_AEL)
ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
#endif
@@ -945,7 +951,7 @@ static void pbcwhere(const char *text, int *line, int *col )
#define STORE_POS
#define STORE_LOC
#endif
-#line 948 "ael_lex.c"
+#line 954 "ael_lex.c"
#define INITIAL 0
#define paren 1
@@ -1193,10 +1199,10 @@ YY_DECL
register int yy_act;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-#line 206 "ael.flex"
+#line 214 "ael.flex"
-#line 1199 "ael_lex.c"
+#line 1205 "ael_lex.c"
yylval = yylval_param;
@@ -1287,255 +1293,255 @@ do_action: /* This label is used only to access EOF actions. */
case 1:
YY_RULE_SETUP
-#line 208 "ael.flex"
+#line 216 "ael.flex"
{ STORE_POS; return LC;}
YY_BREAK
case 2:
YY_RULE_SETUP
-#line 209 "ael.flex"
+#line 217 "ael.flex"
{ STORE_POS; return RC;}
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 210 "ael.flex"
+#line 218 "ael.flex"
{ STORE_POS; return LP;}
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 211 "ael.flex"
+#line 219 "ael.flex"
{ STORE_POS; return RP;}
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 212 "ael.flex"
+#line 220 "ael.flex"
{ STORE_POS; return SEMI;}
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 213 "ael.flex"
+#line 221 "ael.flex"
{ STORE_POS; return EQ;}
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 214 "ael.flex"
+#line 222 "ael.flex"
{ STORE_POS; return COMMA;}
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 215 "ael.flex"
+#line 223 "ael.flex"
{ STORE_POS; return COLON;}
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 216 "ael.flex"
+#line 224 "ael.flex"
{ STORE_POS; return AMPER;}
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 217 "ael.flex"
+#line 225 "ael.flex"
{ STORE_POS; return BAR;}
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 218 "ael.flex"
+#line 226 "ael.flex"
{ STORE_POS; return EXTENMARK;}
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 219 "ael.flex"
+#line 227 "ael.flex"
{ STORE_POS; return AT;}
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 220 "ael.flex"
+#line 228 "ael.flex"
{/*comment*/}
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 221 "ael.flex"
+#line 229 "ael.flex"
{ STORE_POS; return KW_CONTEXT;}
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 222 "ael.flex"
+#line 230 "ael.flex"
{ STORE_POS; return KW_ABSTRACT;}
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 223 "ael.flex"
+#line 231 "ael.flex"
{ STORE_POS; return KW_EXTEND;}
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 224 "ael.flex"
+#line 232 "ael.flex"
{ STORE_POS; return KW_MACRO;};
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 225 "ael.flex"
+#line 233 "ael.flex"
{ STORE_POS; return KW_GLOBALS;}
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 226 "ael.flex"
+#line 234 "ael.flex"
{ STORE_POS; return KW_IGNOREPAT;}
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 227 "ael.flex"
+#line 235 "ael.flex"
{ STORE_POS; return KW_SWITCH;}
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 228 "ael.flex"
+#line 236 "ael.flex"
{ STORE_POS; return KW_IF;}
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 229 "ael.flex"
+#line 237 "ael.flex"
{ STORE_POS; return KW_IFTIME;}
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 230 "ael.flex"
+#line 238 "ael.flex"
{ STORE_POS; return KW_RANDOM;}
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 231 "ael.flex"
+#line 239 "ael.flex"
{ STORE_POS; return KW_REGEXTEN;}
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 232 "ael.flex"
+#line 240 "ael.flex"
{ STORE_POS; return KW_HINT;}
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 233 "ael.flex"
+#line 241 "ael.flex"
{ STORE_POS; return KW_ELSE;}
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 234 "ael.flex"
+#line 242 "ael.flex"
{ STORE_POS; return KW_GOTO;}
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 235 "ael.flex"
+#line 243 "ael.flex"
{ STORE_POS; return KW_JUMP;}
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 236 "ael.flex"
+#line 244 "ael.flex"
{ STORE_POS; return KW_RETURN;}
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 237 "ael.flex"
+#line 245 "ael.flex"
{ STORE_POS; return KW_BREAK;}
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 238 "ael.flex"
+#line 246 "ael.flex"
{ STORE_POS; return KW_CONTINUE;}
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 239 "ael.flex"
+#line 247 "ael.flex"
{ STORE_POS; return KW_FOR;}
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 240 "ael.flex"
+#line 248 "ael.flex"
{ STORE_POS; return KW_WHILE;}
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 241 "ael.flex"
+#line 249 "ael.flex"
{ STORE_POS; return KW_CASE;}
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 242 "ael.flex"
+#line 250 "ael.flex"
{ STORE_POS; return KW_DEFAULT;}
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 243 "ael.flex"
+#line 251 "ael.flex"
{ STORE_POS; return KW_PATTERN;}
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 244 "ael.flex"
+#line 252 "ael.flex"
{ STORE_POS; return KW_CATCH;}
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 245 "ael.flex"
+#line 253 "ael.flex"
{ STORE_POS; return KW_SWITCHES;}
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 246 "ael.flex"
+#line 254 "ael.flex"
{ STORE_POS; return KW_ESWITCHES;}
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 247 "ael.flex"
+#line 255 "ael.flex"
{ STORE_POS; return KW_INCLUDES;}
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 248 "ael.flex"
+#line 256 "ael.flex"
{ BEGIN(comment); my_col += 2; }
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 250 "ael.flex"
+#line 258 "ael.flex"
{ my_col += yyleng; }
YY_BREAK
case 43:
/* rule 43 can match eol */
YY_RULE_SETUP
-#line 251 "ael.flex"
+#line 259 "ael.flex"
{ ++my_lineno; my_col=1;}
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 252 "ael.flex"
+#line 260 "ael.flex"
{ my_col += yyleng; }
YY_BREAK
case 45:
/* rule 45 can match eol */
YY_RULE_SETUP
-#line 253 "ael.flex"
+#line 261 "ael.flex"
{ ++my_lineno; my_col=1;}
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 254 "ael.flex"
+#line 262 "ael.flex"
{ my_col += 2; BEGIN(INITIAL); } /* the nice thing about comments is that you know exactly what ends them */
YY_BREAK
case 47:
/* rule 47 can match eol */
YY_RULE_SETUP
-#line 256 "ael.flex"
+#line 264 "ael.flex"
{ my_lineno++; my_col = 1; }
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 257 "ael.flex"
+#line 265 "ael.flex"
{ my_col += yyleng; }
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 258 "ael.flex"
+#line 266 "ael.flex"
{ my_col += (yyleng*8)-(my_col%8); }
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 260 "ael.flex"
+#line 268 "ael.flex"
{
/* boy did I open a can of worms when I changed the lexical token "word".
all the above keywords can be used as a beginning to a "word".-
@@ -1564,17 +1570,17 @@ YY_RULE_SETUP
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 285 "ael.flex"
+#line 294 "ael.flex"
{ yymore(); /* Keep going */ }
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 286 "ael.flex"
+#line 295 "ael.flex"
{ yymore(); /* Keep Going */ }
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 287 "ael.flex"
+#line 296 "ael.flex"
{ /* the beginning of a ${} construct. prepare and pop into curlystate */
parencount2 = 0;
pbcpos2 = 0;
@@ -1585,7 +1591,7 @@ YY_RULE_SETUP
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 294 "ael.flex"
+#line 303 "ael.flex"
{ /* the beginning of a $[] construct. prepare and pop into brackstate */
parencount3 = 0;
pbcpos3 = 0;
@@ -1597,7 +1603,7 @@ YY_RULE_SETUP
case 55:
/* rule 55 can match eol */
YY_RULE_SETUP
-#line 301 "ael.flex"
+#line 310 "ael.flex"
{
/* a non-word constituent char, like a space, tab, curly, paren, etc */
char c = yytext[yyleng-1];
@@ -1614,7 +1620,7 @@ YY_RULE_SETUP
case 56:
/* rule 56 can match eol */
YY_RULE_SETUP
-#line 313 "ael.flex"
+#line 322 "ael.flex"
{
if ( pbcpop2('}') ) { /* error */
STORE_LOC;
@@ -1637,7 +1643,7 @@ YY_RULE_SETUP
case 57:
/* rule 57 can match eol */
YY_RULE_SETUP
-#line 332 "ael.flex"
+#line 341 "ael.flex"
{
char c = yytext[yyleng-1];
if (c == '{')
@@ -1649,7 +1655,7 @@ YY_RULE_SETUP
case 58:
/* rule 58 can match eol */
YY_RULE_SETUP
-#line 340 "ael.flex"
+#line 349 "ael.flex"
{
char c = yytext[yyleng-1];
if ( pbcpop2(c)) { /* error */
@@ -1668,7 +1674,7 @@ YY_RULE_SETUP
case 59:
/* rule 59 can match eol */
YY_RULE_SETUP
-#line 356 "ael.flex"
+#line 365 "ael.flex"
{
if ( pbcpop3(']') ) { /* error */
STORE_LOC;
@@ -1691,7 +1697,7 @@ YY_RULE_SETUP
case 60:
/* rule 60 can match eol */
YY_RULE_SETUP
-#line 375 "ael.flex"
+#line 384 "ael.flex"
{
char c = yytext[yyleng-1];
if (c == '[')
@@ -1703,7 +1709,7 @@ YY_RULE_SETUP
case 61:
/* rule 61 can match eol */
YY_RULE_SETUP
-#line 383 "ael.flex"
+#line 392 "ael.flex"
{
char c = yytext[yyleng-1];
if ( pbcpop3(c)) { /* error */
@@ -1729,7 +1735,7 @@ YY_RULE_SETUP
case 62:
/* rule 62 can match eol */
YY_RULE_SETUP
-#line 406 "ael.flex"
+#line 415 "ael.flex"
{
if ( pbcpop(')') ) { /* error */
STORE_LOC;
@@ -1758,7 +1764,7 @@ YY_RULE_SETUP
case 63:
/* rule 63 can match eol */
YY_RULE_SETUP
-#line 431 "ael.flex"
+#line 440 "ael.flex"
{
char c = yytext[yyleng-1];
if (c == '(')
@@ -1770,7 +1776,7 @@ YY_RULE_SETUP
case 64:
/* rule 64 can match eol */
YY_RULE_SETUP
-#line 439 "ael.flex"
+#line 448 "ael.flex"
{
char c = yytext[yyleng-1];
if ( pbcpop(c)) { /* error */
@@ -1797,7 +1803,7 @@ YY_RULE_SETUP
case 65:
/* rule 65 can match eol */
YY_RULE_SETUP
-#line 463 "ael.flex"
+#line 472 "ael.flex"
{
char c = yytext[yyleng-1];
if (c == '(')
@@ -1809,7 +1815,7 @@ YY_RULE_SETUP
case 66:
/* rule 66 can match eol */
YY_RULE_SETUP
-#line 471 "ael.flex"
+#line 480 "ael.flex"
{
if ( pbcpop(')') ) { /* error */
STORE_LOC;
@@ -1840,7 +1846,7 @@ YY_RULE_SETUP
case 67:
/* rule 67 can match eol */
YY_RULE_SETUP
-#line 498 "ael.flex"
+#line 507 "ael.flex"
{
if( parencount != 0) { /* ast_log(LOG_NOTICE,"Folding in a comma!\n"); */
yymore();
@@ -1859,7 +1865,7 @@ YY_RULE_SETUP
case 68:
/* rule 68 can match eol */
YY_RULE_SETUP
-#line 513 "ael.flex"
+#line 522 "ael.flex"
{
char c = yytext[yyleng-1];
if ( pbcpop(c) ) { /* error */
@@ -1882,7 +1888,7 @@ YY_RULE_SETUP
case 69:
/* rule 69 can match eol */
YY_RULE_SETUP
-#line 532 "ael.flex"
+#line 541 "ael.flex"
{
char c = yytext[yyleng-1];
yymore();
@@ -1892,7 +1898,7 @@ YY_RULE_SETUP
case 70:
/* rule 70 can match eol */
YY_RULE_SETUP
-#line 538 "ael.flex"
+#line 547 "ael.flex"
{
char c = yytext[yyleng-1];
if ( pbcpop(c) ) { /* error */
@@ -1910,7 +1916,7 @@ YY_RULE_SETUP
case 71:
/* rule 71 can match eol */
YY_RULE_SETUP
-#line 552 "ael.flex"
+#line 561 "ael.flex"
{
STORE_LOC;
yylval->str = malloc(yyleng);
@@ -1924,7 +1930,7 @@ YY_RULE_SETUP
case 72:
/* rule 72 can match eol */
YY_RULE_SETUP
-#line 562 "ael.flex"
+#line 571 "ael.flex"
{
char fnamebuf[1024],*p1,*p2;
int glob_ret;
@@ -1973,7 +1979,7 @@ case YY_STATE_EOF(comment):
case YY_STATE_EOF(curlystate):
case YY_STATE_EOF(wordstate):
case YY_STATE_EOF(brackstate):
-#line 603 "ael.flex"
+#line 612 "ael.flex"
{
char fnamebuf[2048];
if (include_stack_index > 0 && include_stack[include_stack_index-1].globbuf_pos < include_stack[include_stack_index-1].globbuf.gl_pathc-1) {
@@ -2007,11 +2013,17 @@ case YY_STATE_EOF(brackstate):
}
YY_BREAK
case 73:
+/* rule 73 can match eol */
+YY_RULE_SETUP
+#line 644 "ael.flex"
+{ /* default rule */ ast_log(LOG_ERROR,"Unhandled char(s): %s\n", yytext); }
+ YY_BREAK
+case 74:
YY_RULE_SETUP
-#line 635 "ael.flex"
-ECHO;
+#line 646 "ael.flex"
+YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
-#line 2014 "ael_lex.c"
+#line 2026 "ael_lex.c"
case YY_END_OF_BUFFER:
{
@@ -3184,7 +3196,7 @@ void *ael_yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
#define YYTABLES_NAME "yytables"
-#line 635 "ael.flex"
+#line 646 "ael.flex"