yacc trouble

M

Mohitz

Hi Guys,

I am facing a peculiar problem with my yacc script. Following is the
snippet of the yacc script that i am using.
I am using lex as the lexical analyzer.


Sample Input :


create template {
with attributes :
attr1 ;
attr2 ;
attr3 ;
}
tpl_name

Output that i get should be ideally


Attribute name is attr1
Attribute name is attr2
Attribute name is attr3

But what i get is

Attribute name is attr1 ;
Attribute name is attr2 ;
Attribute name is attr3 ;

The semicolon appears at the end. Does someone know why this
happens? Would be glad to furnish more information if needed.
The lex seems to be passing the correct token.



Thanks in advance
Mohit

----------------------------------------------------------------------------------------------------------------------
The Yacc Script Snippet
----------------------------------------------------------------------------------------------------------------------

start : CREATE TEMPLATE '{' create_template_body '}'
IDENTIFIER
{
parsedTemplate =
appendTemplateName(strdup($6),$4);
}
;
create_template_body : define_attributes
{
$$ = createTemplate($1);
}
;

define_attributes : WITH ATTRIBUTES ':' attribute_list
{
$$ = $4;
}
;


attribute_list : attribute_list attribute
{
$$ = appendAttribute($1,$2);
// Append attribute to Attribute List
}
| attribute
{
$$ = createAttributeList($1);
}
;


attribute : IDENTIFIER ';'
{
printf("Attribute Name is %s\n",
strdup($1));
$$ = createAttribute(strdup($1));
}


---------------------------------------------------------------------------------------------------------------------
The Lex Script Snippet
---------------------------------------------------------------------------------------------------------------------

PS: There are some other tokens here which might not make sense
because i pasted only the relevant parts of the yacc file.

digit [0-9]
letter [a-zA-Z_.]
word {letter}({letter}|{digit})*
ws [ \n\t]
string \"[^"\n]*["\n]
number {digit}+


%%
"," { showToken(",",yytext); return ','; }
":" { showToken(":",yytext); return ':'; }
"{" { showToken("{",yytext); return '{'; }
"}" { showToken("}",yytext); return '}'; }
";" { showToken(";",yytext); return ';'; }
{string} { yylval.str = strdup(yytext+1);
if (yylval.str[yyleng-2] != '"')
reportError("improperly terminated string");
else {
yylval.str[yyleng-2] = 0;
showToken("STRING", yytext);
return STRING;
}
}


{word} {
if (isIdentifier(yytext) == IDENTIFIER)
{
yylval.str = yytext;
showToken("IDENTIFIER",yytext);
return isIdentifier(yytext);
}
else
{
yylval.str = yytext;
showToken("RESERVED", yytext);
return isIdentifier(yytext);
}
}
{number} {
yylval.num = atoi(yytext);
showToken("NUMBER",yytext);
return NUMBER;
}
{ws} ; /* ignore */
{comment} ; /* ignore */
.. {
printf("bad char: '%c'\n", yytext[0]);
showToken("******************",yytext);
}


%%
 
K

Keith Thompson

Mohitz said:
I am facing a peculiar problem with my yacc script. Following is the
snippet of the yacc script that i am using.
I am using lex as the lexical analyzer.


Sample Input :


create template {
with attributes :
attr1 ;
attr2 ;
attr3 ;
}
tpl_name

Output that i get should be ideally


Attribute name is attr1
Attribute name is attr2
Attribute name is attr3

But what i get is

Attribute name is attr1 ;
Attribute name is attr2 ;
Attribute name is attr3 ;

The semicolon appears at the end. Does someone know why this
happens? Would be glad to furnish more information if needed.
The lex seems to be passing the correct token.
[snip]

This isn't a question about C. You might try comp.compilers.
 
M

Mohitz

ok thanks i will..


Mohitz said:
I am facing a peculiar problem with my yacc script. Following is the
snippet of the yacc script that i am using.
I am using lex as the lexical analyzer.
Sample Input :
create template {
with attributes :
attr1 ;
attr2 ;
attr3 ;
}
tpl_name
Output that i get should be ideally
Attribute name is attr1
Attribute name is attr2
Attribute name is attr3
But what i get is
Attribute name is attr1 ;
Attribute name is attr2 ;
Attribute name is attr3 ;
The semicolon appears at the end. Does someone know why this
happens? Would be glad to furnish more information if needed.
The lex seems to be passing the correct token.

[snip]

This isn't a question about C. You might try comp.compilers.

--
Keith Thompson (The_Other_Keith) (e-mail address removed) <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"- Hide quoted text -

- Show quoted text -
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top