获取错误:follex.y:338:10:错误:运行TAMAR迁移学习时,尚未在此范围中声明"ZZ_DOTDO



当我运行TAMAR时,它是一个使用MLN进行迁移学习的系统,通过对先前学习的MLN进行映射和修订。我在运行时从follex.y得到错误

make transfered-learnstruct

错误显示如下:

In file included from /ut-alchemy/src/parser/fol.y:6:0:
/ut-alchemy/src/parser/follex.y:205:10: error:‘ZZ_NUM’ not yet declared in this scope
return ZZ_NUM;  
^
In file included from /ut-alchemy/src/parser/fol.y:6:0:
/ut-alchemy/src/parser/follex.y:214:10: error:‘ZZ_NUM’ not yet declared in this scope
return ZZ_NUM;
^
In file included from /ut-alchemy/src/parser/fol.y:6:0:
/ut-alchemy/src/parser/follex.y:223:10: error:‘ZZ_NUM’ not yet declared in this scope
return ZZ_NUM;
^
In file included from /ut-alchemy/src/parser/fol.y:6:0:
/ut-alchemy/src/parser/follex.y:232:44: error:‘ZZ_CONSTANT’ not yet declared in this scope
if (zzdomain->isConstant(yytext)) return ZZ_CONSTANT;
^
/ut-alchemy/src/parser/follex.y:233:10: error:‘ZZ_STRING’ not yet declared in this scope
return ZZ_STRING;
^
In file included from /ut-alchemy/src/parser/fol.y:6:0:
/ut-alchemy/src/parser/follex.y:245:12: error:‘ZZ_TYPE’ not yet declared in this scope
return ZZ_TYPE;
^
/ut-alchemy/src/parser/follex.y:250:12: error:‘ZZ_PREDICATE’ not yet declared in this scope
return ZZ_PREDICATE; 
^
/ut-alchemy/src/parser/follex.y:255:12: error:‘ZZ_FUNCTION’ not yet declared in this scope
return ZZ_FUNCTION;
^
/ut-alchemy/src/parser/follex.y:260:12: error:‘ZZ_CONSTANT’ not yet declared in this scope
return ZZ_CONSTANT;
^
/ut-alchemy/src/parser/follex.y:263:10: error:‘ZZ_VARIABLE’ not yet declared in this scope
return ZZ_VARIABLE;
^
In file included from /ut-alchemy/src/parser/fol.y:6:0:
/ut-alchemy/src/parser/follex.y:329:10: error:‘ZZ_EQEQ’ not yet declared in this scope
return ZZ_EQEQ;
^
In file included from /ut-alchemy/src/parser/fol.y:6:0:
/ut-alchemy/src/parser/follex.y:338:10: error:‘ZZ_DOTDOTDOT’not yet declared in this scope
return ZZ_DOTDOTDOT;

follex.y是

/* scanner for first-order language */
%{
#include "folhelper.h"
bool follexDbg = false; 
//bool follexDbg = true; 
%}

/* not scanning another file after current one */
%option noyywrap 
ZZ_SINGLE_LINE_COMMENT ([/][/][^rn]*)
ZZ_MULTI_LINE_COMMENT ([/][*][^*]*[*]([*]|[^*][^*/]*[*])*[/])
/* double ' and " to avoid string syntax highlighting in xemacs */
/*ZZ_STRING  [""]([^""\nr] | ([][ntbrf''""]))*[""]*/
ZZ_STRING  ([""]([^""\nr]|([\][ntbrf''""]))*[""])
ZZ_NOT ([!])
ZZ_OR  [ ]+[v][ rn]+
ZZ_AND [ ]+[^][ rn]+
ZZ_IMPLY [=][>]
ZZ_EQUIV [<][=][>]
ZZ_EXIST  [Ee][Xx][Ii][Ss][Tt]
ZZ_FORALL [Ff][Oo][Rr][Aa][Ll][Ll]
ZZ_ASTERISK [*]
ZZ_PLUS [+]
ZZ_MINUS [-]
ZZ_MINUS_OR_PLUS [+-]
ZZ_QS [?]
ZZ_EQEQ  [=][=]
ZZ_EQ  [=]
ZZ_DOTDOTDOT [.][.][.]
ZZ_INCLUDE [#][i][n][c][l][u][d][e]
ZZ_DIGIT ([0-9]) 
/* double ' to avoid string syntax highlighting in xemacs */
ZZ_ID [a-zA-z_-][a-zA-Z0-9_-'']*
%%
"{" {
if (follexDbg) printf("LBRACE: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return yytext[0];
}

"}" {
if (follexDbg) printf("RBRACE: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return yytext[0];
}

{ZZ_SINGLE_LINE_COMMENT} { 
if (follexDbg) printf("SINGLE_LINE_COMMENT: %sn", yytext);
if (yytext[strlen(yytext)-1] == 'n' || yytext[strlen(yytext)-1] == 'r') 
{
++zzline;
zzcolumn = -1;
} 
else
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
}
{ZZ_MULTI_LINE_COMMENT} { 
if (follexDbg) printf("MULTI_LINE_COMMENT: %sn", yytext);
int i=-1;
while (yytext[++i] != '')
{
if (yytext[i] == 'n' || yytext[i] == 'r') 
{
++zzline;
zzcolumn = -1;
} 
else
zzcolumn++;
}
zznumCharRead += strlen(yytext); 
}

{ZZ_INCLUDE} { 
if (follexDbg) printf("INCLUDE: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return ZZ_INCLUDE;
}

{ZZ_NOT} {
if (follexDbg) printf("NOT: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return yytext[0];
}

{ZZ_OR} {
if (follexDbg) printf("OR: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add("v");
return 'v';
}

{ZZ_AND} {
if (follexDbg) printf("AND: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add("^");
return '^';
}

{ZZ_IMPLY} {
if (follexDbg) printf("IMPLY: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return ZZ_IMPLY;
}

{ZZ_EQUIV} {
if (follexDbg) printf("EQUIV: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return ZZ_EQUIV;
}

{ZZ_EXIST} { 
if (follexDbg) printf("EXIST: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return ZZ_EXIST;
}

{ZZ_FORALL} { 
if (follexDbg) printf("FORALL: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return ZZ_FORALL;
}

{ZZ_ASTERISK} {
if (follexDbg) printf("ASTERISK: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return yytext[0];
}

{ZZ_PLUS} {
if (follexDbg) printf("PLUS: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return yytext[0];
}

{ZZ_MINUS} {
if (follexDbg) printf("MINUS: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return yytext[0];
}
{ZZ_QS} {
if (follexDbg) printf("QS: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return yytext[0];
}

{ZZ_MINUS}?{ZZ_DIGIT}+ {
if (follexDbg) printf("INTEGER: %s (%d)n", yytext, atoi(yytext));
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return ZZ_NUM;  
}

{ZZ_MINUS}?{ZZ_DIGIT}+"."{ZZ_DIGIT}* {
if (follexDbg) printf("FLOAT: %s (%g)n", yytext, atof(yytext));
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return ZZ_NUM;
}

{ZZ_MINUS}?{ZZ_DIGIT}+"."?{ZZ_DIGIT}*"e"{ZZ_MINUS_OR_PLUS}?{ZZ_DIGIT}+ {
if (follexDbg) printf("EXP_FLOAT: %s (%e)n", yytext, atof(yytext));
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return ZZ_NUM;
}

{ZZ_STRING} {
if (follexDbg) printf("STRING: %s n", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
if (zzdomain->isConstant(yytext)) return ZZ_CONSTANT;
return ZZ_STRING;
}

{ZZ_ID} {
//if (follexDbg) printf("IDENTIFIER: %sn", yytext );
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
if (zzdomain->isType(yytext))
{ 
if (follexDbg) printf("ZZ_TYPE: %sn", yytext ); 
return ZZ_TYPE;
}
if (zzdomain->isPredicate(yytext)) 
{ 
if (follexDbg) printf("ZZ_PREDICATE: %sn", yytext ); 
return ZZ_PREDICATE; 
}
if (zzdomain->isFunction(yytext))  
{  
if (follexDbg) printf("ZZ_FUNCTION: %sn", yytext ); 
return ZZ_FUNCTION;
}
if (zzdomain->isConstant(yytext))
{
if (follexDbg) printf("ZZ_CONSTANT: %sn", yytext ); 
return ZZ_CONSTANT;
}
if (follexDbg) printf("ZZ_VARIABLE: %sn", yytext ); 
return ZZ_VARIABLE;
}

"n"|"r" {
if (follexDbg) 
{
if (zzparseGroundPred) printf("AT: %cn", '@');
else                   printf("NEWLINE: %s", yytext);
}
++zzline;
zznumCharRead += 1;
zzcolumn = -1;
if (zzparseGroundPred) { 
zzafterRtParen = false;
zztokenList.add("@");
return '@';
}
zztokenList.add(yytext);
return yytext[0];
}

"(" {
if (follexDbg) printf("LEFT PAREN: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
if (zzparseGroundPred) zzafterRtParen = false;
return yytext[0];
}

")" {
if (follexDbg) printf("RIGHT PAREN: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
if (zzparseGroundPred) zzafterRtParen = true;
return yytext[0];
}

"," {
if (follexDbg) printf("COMMA: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return yytext[0];
}

{ZZ_EQ} {
if (follexDbg) printf("EQUAL: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add("=");
return '=';
}

{ZZ_EQEQ} {
if (follexDbg) printf("EQUALEQUAL: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add("==");
return ZZ_EQEQ;
}

{ZZ_DOTDOTDOT} {
if (follexDbg) printf("DOTDOTDOT: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add("...");
return ZZ_DOTDOTDOT;
}

"@" {
if (follexDbg) printf("AT: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return yytext[0];
}

"." {
if (follexDbg) printf("FULLSTOP: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return yytext[0];
}

[ t]+ { /* eat up whitespace */
if (follexDbg) 
{
if (zzparseGroundPred) printf("WS:n");
}
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
if (zzparseGroundPred && zzafterRtParen) { zztokenList.add("@"); return '@'; }
}

. {
// commented out so as to allow fol.y to deal with the problem
//printf("nERROR: Unrecognized character. %s: ln %d, col %d: %s n", 
//       zzinFileName.c_str(), zzline, zzcolumn+1, yytext);
//exit(-1);
if (follexDbg) printf("Unrecognized character: %sn", yytext);
zzcolumn += strlen(yytext);
zznumCharRead += strlen(yytext);
zztokenList.add(yytext);
return yytext[0];
}
<<EOF>> {
if (zzparseGroundPred) 
{
if (zznumEofSeen == 0) 
{
zznumEofSeen++;
if (follexDbg) printf("EOF returned as @:n");
zztokenList.add("@"); 
return '@'; 
}
else
{
zzparseGroundPred = false;
zzafterRtParen = false;
zznumEofSeen = 0;
}
}
if (zznumEofSeen==0)
{
ungetc(EOF, yyin);
zznumEofSeen = 1;
if (follexDbg) printf("EOF returned as \n:n");    
zztokenList.add("n");  // pretend that file ends with newline
return 'n';
}

zznumEofSeen = 0;

if (follexDbg) printf("EOF %s:n", yytext);
if (false) yyunput(1,NULL); //avoid compilation warning
fclose(yyin);
if (zzinStack.empty()) return 0;
ZZFileState fileState = zzinStack.top();
zzinFileName = fileState.inFileName_;
zznumCharRead = fileState.numCharRead_;
zzline = fileState.line_;
zzcolumn = fileState.column_;
zzinStack.pop();
FILE* previn = fileState.file_;
if (fseek(previn, zznumCharRead-1, SEEK_SET)!=0)
{
printf("nERROR: In follex.y. Failed to seek to previous position in file "
"%s, ln %d, col %dn", zzinFileName.c_str(), zzline, zzcolumn+1);
exit(-1);
}
yyrestart(previn);

}
%%

以下是

%{
#define YYSTYPE int
#define YYDEBUG 1
#include "fol.h"
#include "follex.cpp"
// 0: no output; 1,2: increasing order of verbosity
int folDbg = 0;
//int folDbg = 1;
//int folDbg = 2;
%}

/*************************** Declarations ***************************/
// the token 'error' is declared by Bison
%token ZZ_NUM
%token ZZ_DOTDOTDOT
%token ZZ_STRING
%token ZZ_EQEQ
%token ZZ_INCLUDE
%token ZZ_PREDICATE
%token ZZ_FUNCTION
%token ZZ_CONSTANT
%token ZZ_VARIABLE
%token ZZ_TYPE
%left '-' '+'
%token ZZ_FORALL
%token ZZ_EXIST
%left ZZ_EQUIV
%left ZZ_IMPLY
%left 'v'
%left '^'
%left '!'
%left '*' '/' '%'
%glr-parser
%expect 16
%error-verbose
%% 

我找了很多,但找不到解决办法。有人能帮我解决这些问题吗?谢谢

我找到的解决方案是在以下文件中添加定义

/* Tokens.  */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
/* Put the tokens into the symbol table, so that GDB and other debuggers
know about them.  */
enum yytokentype {
ZZ_NUM = 258,
ZZ_DOTDOTDOT = 259,
ZZ_STRING = 260,
ZZ_EQEQ = 261,
ZZ_INCLUDE = 262,
ZZ_PREDICATE = 263,
ZZ_FUNCTION = 264,
ZZ_CONSTANT = 265,
ZZ_VARIABLE = 266,
ZZ_TYPE = 267,
ZZ_FORALL = 268,
ZZ_EXIST = 269,
ZZ_EQUIV = 270,
ZZ_IMPLY = 271
};
#endif
/* Tokens.  */
#define ZZ_NUM 258
#define ZZ_DOTDOTDOT 259
#define ZZ_STRING 260
#define ZZ_EQEQ 261
#define ZZ_INCLUDE 262
#define ZZ_PREDICATE 263
#define ZZ_FUNCTION 264
#define ZZ_CONSTANT 265
#define ZZ_VARIABLE 266
#define ZZ_TYPE 267
#define ZZ_FORALL 268
#define ZZ_EXIST 269
#define ZZ_EQUIV 270
#define ZZ_IMPLY 271

最新更新