%{ #include int yylex(void); void yyerror(char const *); void printValue(char *val) { fprintf(stderr, "%s", val); } %} %union{ char *stringVal; } %error-verbose %token '(' ')' ',' ';' '.' '=' %token NEW TREENODE_TYPE JTREE_TYPE ADDOBJECT %token STRINGVALUE SYMBOL %type Object %% Program: InstructionList { fprintf( stderr, " "); } InstructionList :Instruction | InstructionList Instruction ; Instruction : NodeDef ';' | TreeDef ';' | NodeAdd ';' | error ';' {yyerrok;} ; NodeDef : NodeDecl '=' NEW TREENODE_TYPE '(' STRINGVALUE ')' { fprintf( stderr, " ", $6 ); } | NodeDecl '=' NodeAdd { fprintf( stderr, " " ); } ; TreeDef : JTREE_TYPE SYMBOL '=' NEW JTREE_TYPE '(' SYMBOL ')' { fprintf( stderr, " ", $2, $7); } ; NodeAdd : SYMBOL '.' ADDOBJECT '(' Object ',' Object ')' { fprintf( stderr, " ", $1,$5,$7); } NodeDecl : TREENODE_TYPE SYMBOL Object : SYMBOL {$$ = $1;} | STRINGVALUE {$$ = $1;}