当我运行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