1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

#103: Now strings are defined with ", you can escape them as usual with \"

git-svn-id: http://svn.opennebula.org/one/trunk@506 3034c82b-c49b-4eb3-8279-a7acafdc01c0
This commit is contained in:
Rubén S. Montero 2009-05-06 17:22:44 +00:00
parent 2c567957c3
commit 5f14d264ce
4 changed files with 112 additions and 90 deletions

View File

@ -401,8 +401,8 @@ static void yy_fatal_error (yyconst char msg[] );
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
#define YY_NUM_RULES 12
#define YY_END_OF_BUFFER 13
#define YY_NUM_RULES 11
#define YY_END_OF_BUFFER 12
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@ -410,13 +410,13 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
static yyconst flex_int16_t yy_accept[45] =
static yyconst flex_int16_t yy_accept[44] =
{ 0,
0, 0, 0, 0, 13, 12, 2, 2, 12, 6,
3, 4, 7, 11, 12, 11, 11, 8, 2, 2,
0, 6, 4, 7, 0, 1, 6, 3, 4, 5,
7, 11, 0, 8, 11, 0, 11, 0, 8, 9,
9, 10, 10, 0
0, 0, 0, 0, 12, 11, 2, 2, 11, 6,
3, 4, 7, 10, 11, 10, 8, 2, 2, 0,
6, 4, 7, 0, 1, 6, 3, 4, 5, 7,
10, 0, 8, 10, 0, 10, 8, 9, 9, 0,
9, 9, 0
} ;
static yyconst flex_int32_t yy_ec[256] =
@ -424,17 +424,17 @@ static yyconst flex_int32_t yy_ec[256] =
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 2, 1, 4, 5, 1, 1, 1, 6, 1,
1, 1, 1, 7, 1, 1, 1, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 1, 1, 1,
9, 1, 1, 1, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
10, 1, 11, 1, 8, 1, 8, 8, 8, 8,
1, 2, 1, 4, 5, 1, 1, 1, 1, 1,
1, 1, 1, 6, 1, 1, 1, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 1, 1, 1,
8, 1, 1, 1, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
9, 10, 11, 1, 7, 1, 7, 7, 7, 7,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 1, 1, 1, 1, 1, 1, 1, 1,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@ -453,66 +453,66 @@ static yyconst flex_int32_t yy_ec[256] =
static yyconst flex_int32_t yy_meta[12] =
{ 0,
1, 2, 2, 1, 3, 1, 3, 1, 3, 3,
1, 2, 2, 1, 3, 3, 1, 3, 3, 1,
3
} ;
static yyconst flex_int16_t yy_base[52] =
static yyconst flex_int16_t yy_base[50] =
{ 0,
0, 0, 11, 0, 47, 95, 21, 31, 43, 0,
33, 41, 0, 0, 43, 53, 61, 0, 0, 0,
37, 0, 0, 0, 36, 95, 0, 29, 0, 95,
0, 0, 0, 0, 69, 32, 77, 29, 0, 0,
95, 0, 95, 95, 85, 29, 27, 26, 88, 91,
23
0, 0, 11, 0, 46, 100, 21, 31, 38, 0,
33, 41, 0, 0, 43, 52, 0, 0, 0, 36,
0, 0, 0, 35, 100, 0, 29, 0, 100, 0,
0, 0, 0, 62, 69, 31, 0, 0, 100, 76,
0, 83, 100, 93, 29, 28, 27, 96, 23
} ;
static yyconst flex_int16_t yy_def[52] =
static yyconst flex_int16_t yy_def[50] =
{ 0,
44, 1, 44, 3, 44, 44, 44, 44, 45, 46,
44, 44, 47, 48, 44, 49, 50, 51, 7, 8,
45, 46, 12, 47, 45, 44, 46, 44, 12, 44,
47, 48, 15, 51, 49, 49, 50, 50, 51, 48,
44, 48, 44, 0, 44, 44, 44, 44, 44, 44,
44
43, 1, 43, 3, 43, 43, 43, 43, 44, 45,
43, 43, 46, 47, 43, 48, 49, 7, 8, 44,
45, 12, 46, 44, 43, 45, 43, 12, 43, 46,
47, 15, 49, 48, 48, 34, 49, 47, 43, 48,
34, 48, 0, 43, 43, 43, 43, 43, 43
} ;
static yyconst flex_int16_t yy_nxt[107] =
static yyconst flex_int16_t yy_nxt[112] =
{ 0,
6, 7, 8, 6, 9, 6, 10, 11, 12, 6,
13, 14, 15, 6, 16, 6, 17, 6, 14, 6,
18, 6, 19, 20, 39, 21, 32, 22, 31, 23,
27, 24, 20, 20, 43, 41, 28, 22, 26, 26,
28, 24, 29, 30, 33, 26, 44, 44, 44, 44,
44, 44, 34, 35, 44, 44, 32, 44, 35, 44,
35, 37, 44, 44, 37, 44, 32, 44, 37, 35,
44, 44, 40, 44, 35, 44, 35, 37, 44, 44,
37, 44, 42, 44, 37, 25, 25, 25, 36, 36,
36, 38, 38, 38, 5, 44, 44, 44, 44, 44,
6, 7, 8, 6, 9, 10, 11, 12, 6, 6,
13, 14, 15, 6, 16, 6, 6, 14, 6, 17,
14, 6, 18, 19, 37, 20, 21, 31, 22, 30,
26, 23, 19, 19, 41, 27, 21, 25, 25, 27,
25, 23, 28, 29, 32, 43, 43, 43, 43, 43,
43, 33, 34, 43, 43, 31, 43, 43, 34, 43,
43, 36, 34, 43, 43, 38, 43, 43, 34, 43,
43, 36, 39, 43, 43, 43, 43, 43, 40, 42,
43, 43, 43, 43, 43, 40, 39, 43, 43, 43,
43, 43, 40, 24, 24, 24, 35, 35, 35, 5,
44, 44, 44, 44, 44, 44
43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
43
} ;
static yyconst flex_int16_t yy_chk[107] =
static yyconst flex_int16_t yy_chk[112] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 7, 7, 51, 7, 48, 7, 47, 7,
46, 7, 8, 8, 38, 36, 28, 8, 25, 21,
11, 8, 12, 12, 15, 9, 5, 0, 0, 0,
0, 0, 15, 16, 0, 0, 16, 0, 16, 0,
16, 17, 0, 0, 17, 0, 17, 0, 17, 35,
0, 0, 35, 0, 35, 0, 35, 37, 0, 0,
37, 0, 37, 0, 37, 45, 45, 45, 49, 49,
49, 50, 50, 50, 44, 44, 44, 44, 44, 44,
3, 3, 7, 7, 49, 7, 7, 47, 7, 46,
45, 7, 8, 8, 36, 27, 8, 24, 20, 11,
9, 8, 12, 12, 15, 5, 0, 0, 0, 0,
0, 15, 16, 0, 0, 16, 0, 0, 16, 0,
0, 16, 34, 0, 0, 34, 0, 0, 34, 0,
0, 34, 35, 0, 0, 0, 0, 0, 35, 40,
0, 0, 0, 0, 0, 40, 42, 0, 0, 0,
0, 0, 42, 44, 44, 44, 48, 48, 48, 43,
44, 44, 44, 44, 44, 44
43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
43
} ;
/* Table of booleans, true if rule could match eol. */
static yyconst flex_int32_t yy_rule_can_match_eol[13] =
static yyconst flex_int32_t yy_rule_can_match_eol[12] =
{ 0,
1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, };
1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, };
static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;
@ -804,13 +804,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 45 )
if ( yy_current_state >= 44 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
while ( yy_base[yy_current_state] != 95 );
while ( yy_base[yy_current_state] != 100 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
@ -900,7 +900,7 @@ YY_RULE_SETUP
YY_BREAK
/* ------------------------------------------------------------------------ */
/* Attribute values */
/* - String in quoted forms */
/* - String in double quoted form */
/* - Anything but =,][# and blanks */
/* ------------------------------------------------------------------------ */
case 9:
@ -908,29 +908,26 @@ case 9:
YY_RULE_SETUP
#line 74 "template_parser.l"
{ lvalp->val_str = strdup(template_text+1);
lvalp->val_str[template_leng-2] = '\0';
BEGIN(INITIAL); return STRING; }
YY_BREAK
/*
<VALUE>'[^']+' { lvalp->val_str = strdup(template_text+1);
lvalp->val_str[template_leng-2] = '\0';
BEGIN(INITIAL); return STRING; }
YY_BREAK
*/
case 10:
/* rule 10 can match eol */
YY_RULE_SETUP
#line 78 "template_parser.l"
{ lvalp->val_str = strdup(template_text+1);
lvalp->val_str[template_leng-2] = '\0';
BEGIN(INITIAL); return STRING; }
YY_BREAK
case 11:
YY_RULE_SETUP
#line 82 "template_parser.l"
#line 83 "template_parser.l"
{ lvalp->val_str = strdup(template_text);
BEGIN(INITIAL); return STRING;}
YY_BREAK
case 12:
case 11:
YY_RULE_SETUP
#line 84 "template_parser.l"
#line 85 "template_parser.l"
ECHO;
YY_BREAK
#line 934 "template_parser.c"
#line 931 "template_parser.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(VALUE):
yyterminate();
@ -1223,7 +1220,7 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 45 )
if ( yy_current_state >= 44 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@ -1251,11 +1248,11 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 45 )
if ( yy_current_state >= 44 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
yy_is_jam = (yy_current_state == 44);
yy_is_jam = (yy_current_state == 43);
return yy_is_jam ? 0 : yy_current_state;
}
@ -1900,7 +1897,7 @@ void template_free (void * ptr )
#define YYTABLES_NAME "yytables"
#line 84 "template_parser.l"
#line 85 "template_parser.l"

View File

@ -68,17 +68,18 @@ STRING [^=#[:blank:]\n,\[\]]+
/* ------------------------------------------------------------------------ */
/* Attribute values */
/* - String in quoted forms */
/* - String in double quoted form */
/* - Anything but =,][# and blanks */
/* ------------------------------------------------------------------------ */
<VALUE>\"[^\"]+\" { lvalp->val_str = strdup(yytext+1);
lvalp->val_str[yyleng-2] = '\0';
BEGIN(INITIAL); return STRING; }
<VALUE>\"([^\"]|"\\\"")+\" { lvalp->val_str = strdup(yytext+1);
lvalp->val_str[yyleng-2] = '\0';
BEGIN(INITIAL); return STRING; }
/*
<VALUE>'[^']+' { lvalp->val_str = strdup(yytext+1);
lvalp->val_str[yyleng-2] = '\0';
BEGIN(INITIAL); return STRING; }
*/
<VALUE>{STRING} { lvalp->val_str = strdup(yytext);
BEGIN(INITIAL); return STRING;}
%%

View File

@ -105,7 +105,6 @@
#include <ctype.h>
#include <string.h>
#include "template_syntax.h"
#include "Template.h"
@ -125,6 +124,7 @@ int template_lex (YYSTYPE *lvalp, YYLTYPE *llocp);
int template_parse(Template * tmpl, char ** errmsg);
}
static string& unescape (string &str);
/* Enabling traces. */
@ -1409,7 +1409,7 @@ yyreduce:
string name((yyvsp[(1) - (3)].val_str));
string value((yyvsp[(3) - (3)].val_str));
pattr = new SingleAttribute(name,value);
pattr = new SingleAttribute(name,unescape(value));
tmpl->set(pattr);
@ -1460,7 +1460,7 @@ yyreduce:
TEMPLATE_TO_UPPER(name);
vattr = new map<string,string>;
vattr->insert(make_pair(name,value));
vattr->insert(make_pair(name,unescape(value)));
(yyval.val_attr) = static_cast<void *>(vattr);
@ -1480,7 +1480,7 @@ yyreduce:
attrmap = static_cast<map<string,string> *>((yyvsp[(1) - (5)].val_attr));
attrmap->insert(make_pair(name,value));
attrmap->insert(make_pair(name,unescape(value)));
(yyval.val_attr) = (yyvsp[(1) - (5)].val_attr);
free((yyvsp[(3) - (5)].val_str));
@ -1713,6 +1713,18 @@ yyreturn:
#line 149 "template_syntax.y"
string& unescape (string &str)
{
size_t pos;
while ((pos = str.find("\\\"")) != string::npos)
{
str.replace(pos,2,"\"");
}
return str;
}
extern "C" void template_error(
YYLTYPE * llocp,
Template * tmpl,

View File

@ -23,7 +23,6 @@
#include <ctype.h>
#include <string.h>
#include "template_syntax.h"
#include "Template.h"
@ -43,6 +42,7 @@ int template_lex (YYSTYPE *lvalp, YYLTYPE *llocp);
int template_parse(Template * tmpl, char ** errmsg);
}
static string& unescape (string &str);
%}
%parse-param {Template * tmpl}
@ -78,7 +78,7 @@ attribute: VARIABLE EQUAL STRING
string name($1);
string value($3);
pattr = new SingleAttribute(name,value);
pattr = new SingleAttribute(name,unescape(value));
tmpl->set(pattr);
@ -122,7 +122,7 @@ array_val: VARIABLE EQUAL STRING
TEMPLATE_TO_UPPER(name);
vattr = new map<string,string>;
vattr->insert(make_pair(name,value));
vattr->insert(make_pair(name,unescape(value)));
$$ = static_cast<void *>(vattr);
@ -139,7 +139,7 @@ array_val: VARIABLE EQUAL STRING
attrmap = static_cast<map<string,string> *>($1);
attrmap->insert(make_pair(name,value));
attrmap->insert(make_pair(name,unescape(value)));
$$ = $1;
free($3);
@ -148,6 +148,18 @@ array_val: VARIABLE EQUAL STRING
;
%%
string& unescape (string &str)
{
size_t pos;
while ((pos = str.find("\\\"")) != string::npos)
{
str.replace(pos,2,"\"");
}
return str;
}
extern "C" void template_error(
YYLTYPE * llocp,
Template * tmpl,