%{ /* Compile with -DP_VERBOSE=1 for verbose output. */ /* Compile with -DP_USERPROC=1 to #include p_user_proc.c. */ /* p_user_proc.c should #define P_ACT, P_BUILD, P_TOKEN, P_PRINT to*/ /* different procedures from those below, and supply code. */ /* *_strict rules are documentation; unreachable; hand-code semantic actions.*/ #include #include #include #ifndef P_VERBOSE # define P_VERBOSE 0 #endif #ifdef P_USERPROC # include "p_user_proc.c" #else # define P_ACT(ss) if(verbose)printf("%7d %s\n",yylineno,ss); # define P_BUILD(sym,A,B,C,D,E,F,G,H,I,J) pBuildTree(sym,A,B,C,D,E,F,G,H,I,J) # define P_TOKEN(tok,symIdx) pToken(tok,symIdx) # define P_PRINT(ss) if(verbose){printf("\n\n");pPrintTree(ss,0);} #endif #define MAX_CH 12 extern int yylineno; /* tptp_ff is just an example of lex-er interface; setting to 0 is no-op. */ extern int tptp_ff; extern int tptp_store_size; extern char* tptp_lval[]; int verbose = P_VERBOSE; char pTokenBuf[8240]; /* pPrintIdx is where to find top-level comments to print before a sentence. yywrap() gets those after last sentence. */ int pPrintIdx = 0; typedef struct pTreeNode * pTree; struct pTreeNode {char* sym; int symIdx; pTree ch[MAX_CH+1];}; pTree pBuildTree(char* sym, pTree A, pTree B, pTree C, pTree D, pTree E, pTree F, pTree G, pTree H, pTree I, pTree J); pTree pBuildTree(char* sym, pTree A, pTree B, pTree C, pTree D, pTree E, pTree F, pTree G, pTree H, pTree I, pTree J) { pTree ss = (pTree)calloc(1,sizeof(struct pTreeNode)); ss->sym = sym; ss->symIdx = -1; ss->ch[0] = A; ss->ch[1] = B; ss->ch[2] = C; ss->ch[3] = D; ss->ch[4] = E; ss->ch[5] = F; ss->ch[6] = G; ss->ch[7] = H; ss->ch[8] = I; ss->ch[9] = J; ss->ch[10] = 0; return ss; } pTree pToken(char* tok, int symIdx); pTree pToken(char* tok, int symIdx) { pTree ss; char* sym = tptp_lval[symIdx]; char* safeSym; strncpy(pTokenBuf, tok, 39); strncat(pTokenBuf, sym, 8193); safeSym = strdup(pTokenBuf); ss = pBuildTree(safeSym,0,0,0,0,0,0,0,0,0,0); ss->symIdx = symIdx; return ss; } void pPrintComments(int start, int depth); void pPrintComments(int start, int depth) { int d, j; char c1[4] = "%", c2[4] = "/*"; j = start; while (tptp_lval[j] != NULL && (tptp_lval[j][0]==c1[0] || (tptp_lval[j][0]==c2[0] && tptp_lval[j][1]==c2[1]))) { for (d=0; d= 0) { pPrintComments(pPrintIdx, 0); pPrintIdx = -1;} if (ss == NULL) return; for (d = 0; d < depth; d++) printf(" "); if (ss->ch[0] == 0) printf("%s\n", ss->sym); else printf("<%s>\n", ss->sym); if (strcmp(ss->sym, "PERIOD .") == 0) pPrintIdx = (ss->symIdx+1)%tptp_store_size; if (ss->symIdx >= 0) pPrintComments((ss->symIdx+1)%tptp_store_size, depth); i = 0; while(ss->ch[i] != 0) {pPrintTree(ss->ch[i], depth+1); i++;} return; } int yywrap(void) { P_PRINT(NULL); return 1; } %} %union {int ival; double dval; char* sval; void* pval;} %start TPTP_file %token AMPERSAND %token CNF %token COLON %token COMMA %token EQUALS %token EXCLAMATION %token FOF %token IF %token IFF %token IMPLIES %token INCLUDE %token INPUT_CLAUSE %token INPUT_FORMULA %token LBRKT %token LPAREN %token MMINUS %token NAMPERSAND %token NEQUALS %token NIFF %token NVLINE %token PERIOD %token PPLUS %token QUESTION %token RBRKT %token RPAREN %token TILDE %token TOK_FALSE %token TOK_TRUE %token VLINE %token atomic_system_word %token decimal_part %token distinct_object %token lower_word %token real %token signed_integer %token single_quoted %token unrecognized %token unsigned_integer %token upper_word %% TPTP_file : null {} | TPTP_file TPTP_input {} ; TPTP_input : annotated_formula {P_PRINT($$);} | include {P_PRINT($$);} ; annotated_formula : fof_annotated {$$ = P_BUILD("annotated_formula", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | cnf_annotated {$$ = P_BUILD("annotated_formula", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | TPTP_input_formula {$$ = P_BUILD("annotated_formula", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | TPTP_input_clause {$$ = P_BUILD("annotated_formula", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; fof_annotated : FOF LPAREN name COMMA formula_role COMMA fof_formula annotations RPAREN PERIOD {$$ = P_BUILD("fof_annotated", P_TOKEN("FOF ", $1), P_TOKEN("LPAREN ", $2), $3, P_TOKEN("COMMA ", $4), $5, P_TOKEN("COMMA ", $6), $7, $8, P_TOKEN("RPAREN ", $9), P_TOKEN("PERIOD ", $10));} ; cnf_annotated : CNF LPAREN name COMMA formula_role COMMA cnf_formula annotations RPAREN PERIOD {$$ = P_BUILD("cnf_annotated", P_TOKEN("CNF ", $1), P_TOKEN("LPAREN ", $2), $3, P_TOKEN("COMMA ", $4), $5, P_TOKEN("COMMA ", $6), $7, $8, P_TOKEN("RPAREN ", $9), P_TOKEN("PERIOD ", $10));} ; annotations : null {$$ = P_BUILD("annotations", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | COMMA source {$$ = P_BUILD("annotations", P_TOKEN("COMMA ", $1), $2, 0, 0, 0, 0, 0, 0, 0, 0);} | COMMA source COMMA useful_info {$$ = P_BUILD("annotations", P_TOKEN("COMMA ", $1), $2, P_TOKEN("COMMA ", $3), $4, 0, 0, 0, 0, 0, 0);} ; formula_role : atomic_word {$$ = P_BUILD("formula_role", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; fof_formula : binary_formula {$$ = P_BUILD("fof_formula", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0); tptp_ff = 0;} | unitary_formula {$$ = P_BUILD("fof_formula", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0); tptp_ff = 0;} ; binary_formula : nonassoc_binary {$$ = P_BUILD("binary_formula", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | assoc_binary {$$ = P_BUILD("binary_formula", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; nonassoc_binary : unitary_formula binary_connective unitary_formula {$$ = P_BUILD("nonassoc_binary", $1, $2, $3, 0, 0, 0, 0, 0, 0, 0);} ; binary_connective : IFF {$$ = P_BUILD("binary_connective", P_TOKEN("IFF ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} | IMPLIES {$$ = P_BUILD("binary_connective", P_TOKEN("IMPLIES ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} | IF {$$ = P_BUILD("binary_connective", P_TOKEN("IF ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} | NIFF {$$ = P_BUILD("binary_connective", P_TOKEN("NIFF ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} | NVLINE {$$ = P_BUILD("binary_connective", P_TOKEN("NVLINE ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} | NAMPERSAND {$$ = P_BUILD("binary_connective", P_TOKEN("NAMPERSAND ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; assoc_binary : or_formula {$$ = P_BUILD("assoc_binary", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | and_formula {$$ = P_BUILD("assoc_binary", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; or_formula : unitary_formula VLINE unitary_formula {$$ = P_BUILD("or_formula", $1, P_TOKEN("VLINE ", $2), $3, 0, 0, 0, 0, 0, 0, 0);} | unitary_formula VLINE or_formula {$$ = P_BUILD("or_formula", $1, P_TOKEN("VLINE ", $2), $3, 0, 0, 0, 0, 0, 0, 0);} ; and_formula : unitary_formula AMPERSAND unitary_formula {$$ = P_BUILD("and_formula", $1, P_TOKEN("AMPERSAND ", $2), $3, 0, 0, 0, 0, 0, 0, 0);} | unitary_formula AMPERSAND and_formula {$$ = P_BUILD("and_formula", $1, P_TOKEN("AMPERSAND ", $2), $3, 0, 0, 0, 0, 0, 0, 0);} ; unitary_formula : quantified_formula {$$ = P_BUILD("unitary_formula", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | unary_formula {$$ = P_BUILD("unitary_formula", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | LPAREN fof_formula RPAREN {$$ = P_BUILD("unitary_formula", P_TOKEN("LPAREN ", $1), $2, P_TOKEN("RPAREN ", $3), 0, 0, 0, 0, 0, 0, 0);} | atomic_formula {$$ = P_BUILD("unitary_formula", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; quantified_formula : quantifier LBRKT variable_list RBRKT COLON unitary_formula {$$ = P_BUILD("quantified_formula", $1, P_TOKEN("LBRKT ", $2), $3, P_TOKEN("RBRKT ", $4), P_TOKEN("COLON ", $5), $6, 0, 0, 0, 0);} ; quantifier : EXCLAMATION {$$ = P_BUILD("quantifier", P_TOKEN("EXCLAMATION ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} | QUESTION {$$ = P_BUILD("quantifier", P_TOKEN("QUESTION ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; variable_list : variable {$$ = P_BUILD("variable_list", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | variable COMMA variable_list {$$ = P_BUILD("variable_list", $1, P_TOKEN("COMMA ", $2), $3, 0, 0, 0, 0, 0, 0, 0);} ; unary_formula : unary_connective unitary_formula {$$ = P_BUILD("unary_formula", $1, $2, 0, 0, 0, 0, 0, 0, 0, 0);} ; unary_connective : TILDE {$$ = P_BUILD("unary_connective", P_TOKEN("TILDE ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; cnf_formula : LPAREN disjunction RPAREN {$$ = P_BUILD("cnf_formula", P_TOKEN("LPAREN ", $1), $2, P_TOKEN("RPAREN ", $3), 0, 0, 0, 0, 0, 0, 0); tptp_ff = 0;} | disjunction {$$ = P_BUILD("cnf_formula", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0); tptp_ff = 0;} ; disjunction : literal {$$ = P_BUILD("disjunction", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | literal VLINE disjunction {$$ = P_BUILD("disjunction", $1, P_TOKEN("VLINE ", $2), $3, 0, 0, 0, 0, 0, 0, 0);} ; literal : atomic_formula {$$ = P_BUILD("literal", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | TILDE atomic_formula {$$ = P_BUILD("literal", P_TOKEN("TILDE ", $1), $2, 0, 0, 0, 0, 0, 0, 0, 0);} ; atomic_formula : plain_atom {$$ = P_BUILD("atomic_formula", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | defined_atom {$$ = P_BUILD("atomic_formula", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | system_atom {$$ = P_BUILD("atomic_formula", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; plain_atom : plain_term {$$ = P_BUILD("plain_atom", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; arguments : term {$$ = P_BUILD("arguments", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | term COMMA arguments {$$ = P_BUILD("arguments", $1, P_TOKEN("COMMA ", $2), $3, 0, 0, 0, 0, 0, 0, 0);} ; defined_atom : TOK_TRUE {$$ = P_BUILD("defined_atom", P_TOKEN("TOK_TRUE ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} | TOK_FALSE {$$ = P_BUILD("defined_atom", P_TOKEN("TOK_FALSE ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} | term EQUALS term {$$ = P_BUILD("defined_atom", $1, P_TOKEN("EQUALS ", $2), $3, 0, 0, 0, 0, 0, 0, 0);} | term NEQUALS term {$$ = P_BUILD("defined_atom", $1, P_TOKEN("NEQUALS ", $2), $3, 0, 0, 0, 0, 0, 0, 0);} ; system_atom : system_term {$$ = P_BUILD("system_atom", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; term : function_term {$$ = P_BUILD("term", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | variable {$$ = P_BUILD("term", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; function_term : plain_term {$$ = P_BUILD("function_term", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | defined_term {$$ = P_BUILD("function_term", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | system_term {$$ = P_BUILD("function_term", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; plain_term : constant {$$ = P_BUILD("plain_term", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | functor LPAREN arguments RPAREN {$$ = P_BUILD("plain_term", $1, P_TOKEN("LPAREN ", $2), $3, P_TOKEN("RPAREN ", $4), 0, 0, 0, 0, 0, 0);} ; constant : atomic_word {$$ = P_BUILD("constant", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; functor : atomic_word {$$ = P_BUILD("functor", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; defined_term : number {$$ = P_BUILD("defined_term", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | distinct_object {$$ = P_BUILD("defined_term", P_TOKEN("distinct_object ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; system_term : system_constant {$$ = P_BUILD("system_term", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | system_functor LPAREN arguments RPAREN {$$ = P_BUILD("system_term", $1, P_TOKEN("LPAREN ", $2), $3, P_TOKEN("RPAREN ", $4), 0, 0, 0, 0, 0, 0);} ; system_functor : atomic_system_word {$$ = P_BUILD("system_functor", P_TOKEN("atomic_system_word ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; system_constant : atomic_system_word {$$ = P_BUILD("system_constant", P_TOKEN("atomic_system_word ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; variable : upper_word {$$ = P_BUILD("variable", P_TOKEN("upper_word ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; source : general_function {$$ = P_BUILD("source", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; file_name : atomic_word {$$ = P_BUILD("file_name", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; useful_info : general_list {$$ = P_BUILD("useful_info", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; include : INCLUDE LPAREN file_name formula_selection RPAREN PERIOD {$$ = P_BUILD("include", P_TOKEN("INCLUDE ", $1), P_TOKEN("LPAREN ", $2), $3, $4, P_TOKEN("RPAREN ", $5), P_TOKEN("PERIOD ", $6), 0, 0, 0, 0);} ; formula_selection : null {$$ = P_BUILD("formula_selection", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | COMMA LBRKT name_list RBRKT {$$ = P_BUILD("formula_selection", P_TOKEN("COMMA ", $1), P_TOKEN("LBRKT ", $2), $3, P_TOKEN("RBRKT ", $4), 0, 0, 0, 0, 0, 0);} ; name_list : name {$$ = P_BUILD("name_list", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | name COMMA name_list {$$ = P_BUILD("name_list", $1, P_TOKEN("COMMA ", $2), $3, 0, 0, 0, 0, 0, 0, 0);} ; general_term : general_function {$$ = P_BUILD("general_term", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | general_list {$$ = P_BUILD("general_term", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; general_list : LBRKT RBRKT {$$ = P_BUILD("general_list", P_TOKEN("LBRKT ", $1), P_TOKEN("RBRKT ", $2), 0, 0, 0, 0, 0, 0, 0, 0);} | LBRKT general_arguments RBRKT {$$ = P_BUILD("general_list", P_TOKEN("LBRKT ", $1), $2, P_TOKEN("RBRKT ", $3), 0, 0, 0, 0, 0, 0, 0);} ; general_function : name {$$ = P_BUILD("general_function", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | functor LPAREN general_arguments RPAREN {$$ = P_BUILD("general_function", $1, P_TOKEN("LPAREN ", $2), $3, P_TOKEN("RPAREN ", $4), 0, 0, 0, 0, 0, 0);} ; general_arguments : general_term {$$ = P_BUILD("general_arguments", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | general_term COMMA general_arguments {$$ = P_BUILD("general_arguments", $1, P_TOKEN("COMMA ", $2), $3, 0, 0, 0, 0, 0, 0, 0);} ; name : atomic_word {$$ = P_BUILD("name", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | unsigned_integer {$$ = P_BUILD("name", P_TOKEN("unsigned_integer ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; atomic_word : lower_word {$$ = P_BUILD("atomic_word", P_TOKEN("lower_word ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} | single_quoted {$$ = P_BUILD("atomic_word", P_TOKEN("single_quoted ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; null : {$$ = P_BUILD("null", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; number : real {$$ = P_BUILD("number", P_TOKEN("real ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} | integer {$$ = P_BUILD("number", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; integer : signed_integer {$$ = P_BUILD("integer", P_TOKEN("signed_integer ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} | unsigned_integer {$$ = P_BUILD("integer", P_TOKEN("unsigned_integer ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; TPTP_FOF_file : null {$$ = P_BUILD("TPTP_FOF_file", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | TPTP_FOF_file TPTP_FOF_input {$$ = P_BUILD("TPTP_FOF_file", $1, $2, 0, 0, 0, 0, 0, 0, 0, 0);} ; TPTP_FOF_input : TPTP_input_formula {$$ = P_BUILD("TPTP_FOF_input", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | include {$$ = P_BUILD("TPTP_FOF_input", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; TPTP_input_formula : INPUT_FORMULA LPAREN name COMMA formula_role COMMA fof_formula RPAREN PERIOD {$$ = P_BUILD("TPTP_input_formula", P_TOKEN("INPUT_FORMULA ", $1), P_TOKEN("LPAREN ", $2), $3, P_TOKEN("COMMA ", $4), $5, P_TOKEN("COMMA ", $6), $7, P_TOKEN("RPAREN ", $8), P_TOKEN("PERIOD ", $9), 0);} ; TPTP_CNF_file : null {$$ = P_BUILD("TPTP_CNF_file", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | TPTP_CNF_file TPTP_CNF_input {$$ = P_BUILD("TPTP_CNF_file", $1, $2, 0, 0, 0, 0, 0, 0, 0, 0);} ; TPTP_CNF_input : TPTP_input_clause {$$ = P_BUILD("TPTP_CNF_input", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | include {$$ = P_BUILD("TPTP_CNF_input", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} ; TPTP_input_clause : INPUT_CLAUSE LPAREN name COMMA formula_role COMMA TPTP_literals RPAREN PERIOD {$$ = P_BUILD("TPTP_input_clause", P_TOKEN("INPUT_CLAUSE ", $1), P_TOKEN("LPAREN ", $2), $3, P_TOKEN("COMMA ", $4), $5, P_TOKEN("COMMA ", $6), $7, P_TOKEN("RPAREN ", $8), P_TOKEN("PERIOD ", $9), 0);} ; TPTP_literals : LBRKT RBRKT {$$ = P_BUILD("TPTP_literals", P_TOKEN("LBRKT ", $1), P_TOKEN("RBRKT ", $2), 0, 0, 0, 0, 0, 0, 0, 0);} | LBRKT TPTP_literal_list RBRKT {$$ = P_BUILD("TPTP_literals", P_TOKEN("LBRKT ", $1), $2, P_TOKEN("RBRKT ", $3), 0, 0, 0, 0, 0, 0, 0);} ; TPTP_literal_list : TPTP_literal {$$ = P_BUILD("TPTP_literal_list", $1, 0, 0, 0, 0, 0, 0, 0, 0, 0);} | TPTP_literal COMMA TPTP_literal_list {$$ = P_BUILD("TPTP_literal_list", $1, P_TOKEN("COMMA ", $2), $3, 0, 0, 0, 0, 0, 0, 0);} ; TPTP_literal : TPTP_sign atomic_formula {$$ = P_BUILD("TPTP_literal", $1, $2, 0, 0, 0, 0, 0, 0, 0, 0);} ; TPTP_sign : PPLUS {$$ = P_BUILD("TPTP_sign", P_TOKEN("PPLUS ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} | MMINUS {$$ = P_BUILD("TPTP_sign", P_TOKEN("MMINUS ", $1), 0, 0, 0, 0, 0, 0, 0, 0, 0);} ;