[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Unable to compile in Visual C++
From: |
Ewa Rom |
Subject: |
Unable to compile in Visual C++ |
Date: |
Fri, 19 Jun 2009 11:38:03 -0400 |
Hi all,
I'm writing my Master thesis that includes a parser. I chose to use Flex and
Bison to help me with this and include the parser into my Visual C++ project.
I stoped at the following issue and I do not know how to recover from it.
Everything appears to be fine as far as I can see.
I have a resource.h file where I define the following:
typedef enum {Var, Int, Opr} nodeEnum;
typedef struct VariableNode{
nodeEnum type;
char *s;
};
typedef struct IntNode{
nodeEnum type;
int i;
};
typedef struct OperNode{
nodeEnum type;
char *op;
struct nodeType *r;
struct nodeType *l;
};
typedef struct nodeType{
nodeEnum type;
VariableNode v;
IntNode in;
OperNode oper;
};
Then in the CoProveParser.y file I have the following:
%{
int yylex();
void yyerror(char *s);
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <fstream>
#include <windows.h>
#include <Shellapi.h>
#include "parser.hpp"
#include "resource.h"
nodeType *v(char s);
nodeType *in(int i);
nodeType *oper(char s,nodeType l,nodeType r);
void printToFile(char *s);
using namespace std;
%}
%union {
int iValue;
char sIndex;
nodeType *nPtr;
}
%token <sIndex> STRING
%token <iValue> INTEGER
...
%type <nPtr> factor logic boolexpr prgrams expr term stmts statement
%%
Grammar....
%%
// stuff from lex that yacc needs to know about:
extern int yylex();
extern int yyparse();
extern FILE *yyin;
extern FILE *log;
extern int debug;
int status;
nodeType *v(char s){
nodeType *p;
p = (nodeType*)malloc(sizeof(struct VariableNode));
p->type = Var;
p->v.s = &s;
return p;
}
nodeType *in(int i){
nodeType *p;
p = (nodeType*)malloc(sizeof(struct IntNode));
p->type = Int;
p->in.i = i;
return p;
}
nodeType *oper(char s,nodeType l,nodeType r){
nodeType *p;
p = (nodeType*)malloc(sizeof(struct OperNode));
p->type = Opr;
p->oper.op = &s;
p->oper.r = &r;
p->oper.l = &l;
return p;
}
int proving() {
yyparse();
return 1;
}
I do the following:
flex -olex.cpp CoProveLexer.lex
bison -v -d --language=C++ -oparser.cpp CoProveParser.y
Which generates me lex.cpp parser.cpp and parser.hpp files that I have included
into my Visual C++ project.
Then I try to build the project and I get the following error:
1>CoProveParser.y(28) : error C2143: syntax error : missing ';' before '*'
1>CoProveParser.y(28) : error C4430: missing type specifier - int assumed.
Note: C++ does not support default-int
1>CoProveParser.y(28) : error C4430: missing type specifier - int assumed.
Note: C++ does not support default-int
This corresponds to the following block:
%union {
int iValue;
char sIndex;
nodeType *nPtr;
}
It seems like the %union does not know about the definition of the nodeType
structure defined in the resource.h file even if I include it in the first part
of the y file enclosed by %{ %}
Any suggestions much appreciated.
Thank you
Ewa
_________________________________________________________________
We are your photos. Share us now with Windows Live Photos.
http://go.microsoft.com/?linkid=9666047
- Unable to compile in Visual C++,
Ewa Rom <=
Re: Unable to compile in Visual C++, Joel E. Denny, 2009/06/20