• Status: Solved
• Priority: Medium
• Security: Public
• Views: 229

# example in yacc

Could some one write and example program in yacc that shows how to use the pseudovariables \$1,\$2,etc.. to get the value of a variable and puts it in a char variable?
Thanks
Will give more points later.
0
laeuchli
• 4
• 2
• 2
• +2
1 Solution

Author Commented:
come on guys, a comment at least.
0

Commented:
Here's an example, perhaps this helps:

actualparams
:S_LB actualparamlist S_RB
{ \$\$ = \$2; }
|
{ \$\$ = NULL; }
;

The \$1 is the first term of the definiton, \$2 the second, and so on.
e.g.

term: '(' term ')'
-> \$1 = '('
-> \$2 = term
-> \$3 = ')'
And: \$\$ is the result (the left side, "term").
0

Commented:

Sorry don't have time to make a small  example  but you cvan check

http://www.cs.um.edu.mt/~hzarb/CSM201/notes/lecture13/node24.html
0

Commented:
another exaple and 'manuals'

http://www-iiuf.unifr.ch/idp/applications/bison.html

check here the infix notation calculator: calc (23.0)

ps: remember bison is the GNU equivalent of yacc.
0

Author Commented:
sorry, mkahlert,I want more complete sample code.Start from the start of a yacc program.

0

Commented:
>> Will give more points later.

Should give the point now! (to elfie)
0

Commented:
Very easy, it only recognizes this expression: "1+2", but it works.

Code:

%%

result: '1' '+' '2'
{ \$\$ = \$1 + \$3; }

%%

it parses that expression and gives to the "result" (\$\$), the value of the addition of '1' (\$1) and '2' (\$3). In this case, \$2 is '+'.

You must do now a mini-lex and a main, that can be defined in the yacc-file if you want... Anyway as mkahlert pointed, the idea is that the variables \$1,... represent the values of the respective position-field. In the example \$\$ = value of "result", and if we use a rule like this:

result : var '+' var

the variables \$1 and \$3 will have the value of each var, that is is you parse the string: 1+2, "result" will store the value 3 at the end of the parsing.

0

Author Commented:
well how do you print the value of \$\$?

0

Commented:
You just put:

%%

result: '1' '+' '2'
{ \$\$ = \$1 + \$3;
printf("%d",\$\$);  }

%%

For example.
0

Author Commented:
Ok,but what if I wanted to do this with a char? and is the one and two the first two of the tokens for that section or for the whole program. Thanks.

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.