首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行TAMAR迁移学习时,获取错误: follex.y:338:10: error:‘ZZ_DOTDOTDOT’尚未在此范围内声明

运行TAMAR迁移学习时,获取错误: follex.y:338:10: error:‘ZZ_DOTDOTDOT’尚未在此范围内声明
EN

Stack Overflow用户
提问于 2021-05-19 21:30:56
回答 1查看 13关注 0票数 0

当我运行TAMAR时,这是一个使用MLN进行迁移学习的系统,通过对先前学习的MLN执行映射和修订。当我运行

代码语言:javascript
复制
make transfered-learnstruct

错误显示如下:

代码语言:javascript
复制
    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是

代码语言:javascript
复制
/* 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 ([/][/][^\r\n]*)
ZZ_MULTI_LINE_COMMENT ([/][*][^*]*[*]([*]|[^*][^*\/]*[*])*[/])

/* double ' and " to avoid string syntax highlighting in xemacs */
 /*ZZ_STRING  [""]([^""\\n\r] | ([\][ntbr\f''""]))*[""]*/
ZZ_STRING  ([""]([^""\\\n\r]|([\\][ntbr\f''""]))*[""])
ZZ_NOT ([!])
ZZ_OR  [ ]+[v][ \r\n]+
ZZ_AND [ ]+[\^][ \r\n]+
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: %s\n", yytext);
  zzcolumn += strlen(yytext);
  zznumCharRead += strlen(yytext);
  zztokenList.add(yytext);
  return yytext[0];
}


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


{ZZ_SINGLE_LINE_COMMENT} { 
  if (follexDbg) printf("SINGLE_LINE_COMMENT: %s\n", 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: %s\n", yytext);
  int i=-1;
  while (yytext[++i] != '\0')
  {
    if (yytext[i] == '\n' || yytext[i] == '\r') 
    {
      ++zzline;
      zzcolumn = -1;
    } 
    else
      zzcolumn++;
  }
  zznumCharRead += strlen(yytext); 
}


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


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


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


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


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


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


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


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


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


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


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

{ZZ_QS} {
  if (follexDbg) printf("QS: %s\n", 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: %s\n", yytext );
  zzcolumn += strlen(yytext);
  zznumCharRead += strlen(yytext);
  zztokenList.add(yytext);
  if (zzdomain->isType(yytext))
  { 
    if (follexDbg) printf("ZZ_TYPE: %s\n", yytext ); 
    return ZZ_TYPE;
  }
  if (zzdomain->isPredicate(yytext)) 
  { 
    if (follexDbg) printf("ZZ_PREDICATE: %s\n", yytext ); 
    return ZZ_PREDICATE; 
  }
  if (zzdomain->isFunction(yytext))  
  {  
    if (follexDbg) printf("ZZ_FUNCTION: %s\n", yytext ); 
    return ZZ_FUNCTION;
  }
  if (zzdomain->isConstant(yytext))
  {
    if (follexDbg) printf("ZZ_CONSTANT: %s\n", yytext ); 
    return ZZ_CONSTANT;
  }
  if (follexDbg) printf("ZZ_VARIABLE: %s\n", yytext ); 
  return ZZ_VARIABLE;
}


"\n"|"\r" {
  if (follexDbg) 
  {
    if (zzparseGroundPred) printf("AT: %c\n", '@');
    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: %s\n", yytext);
  zzcolumn += strlen(yytext);
  zznumCharRead += strlen(yytext);
  zztokenList.add(yytext);
  if (zzparseGroundPred) zzafterRtParen = false;
  return yytext[0];
}


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


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


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


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


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


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


"." {
  if (follexDbg) printf("FULLSTOP: %s\n", 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: %s\n", 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 %d\n", zzinFileName.c_str(), zzline, zzcolumn+1);
    exit(-1);
  }
  yyrestart(previn);
  
}
%%

这个fol.y是

代码语言:javascript
复制
%{
#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
%% 

我找了很多,但还是找不到解决方案。有人能帮我解决这些问题吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-05-20 22:04:50

我找到的解决方案是在fol.h中添加定义。

代码语言:javascript
复制
/* 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67604288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档