nonExist now does the expected thing

This commit is contained in:
kr.angelov
2013-08-23 13:17:45 +00:00
parent 7c98267193
commit a20cd77d25
13 changed files with 70 additions and 15 deletions

View File

@@ -180,7 +180,8 @@ typedef enum {
PGF_SYMBOL_LIT,
PGF_SYMBOL_VAR,
PGF_SYMBOL_KS,
PGF_SYMBOL_KP
PGF_SYMBOL_KP,
PGF_SYMBOL_NE
} PgfSymbolTag;
typedef struct {
@@ -208,6 +209,8 @@ typedef struct PgfSymbolKP
* symbol. */
} PgfSymbolKP;
typedef struct {
} PgfSymbolNE;
typedef GuSeq PgfSequence; // -> PgfSymbol
typedef GuList(PgfSequence) PgfSequences;

View File

@@ -532,6 +532,10 @@ pgf_lzr_linearize(PgfConcr* concr, PgfCncTree ctree, size_t lin_idx, PgfLinFuncs
}
break;
}
case PGF_SYMBOL_NE: {
// Nothing to be done here
break;
}
default:
gu_impossible();
}

View File

@@ -163,6 +163,8 @@ pgf_prev_extern_sym(PgfSymbol sym)
return *((PgfSymbol*) (((PgfSymbolLit*) i.data)+1));
case PGF_SYMBOL_VAR:
return *((PgfSymbol*) (((PgfSymbolVar*) i.data)+1));
case PGF_SYMBOL_NE:
return *((PgfSymbol*) (((PgfSymbolNE*) i.data)+1));
default:
gu_impossible();
return gu_null_variant;
@@ -1410,6 +1412,10 @@ pgf_parsing_symbol(PgfParseState* before, PgfParseState* after,
case PGF_SYMBOL_VAR:
// XXX TODO proper support
break;
case PGF_SYMBOL_NE: {
// Nothing to be done here
break;
}
default:
gu_impossible();
}
@@ -2743,6 +2749,7 @@ pgf_parser_leftcorner_item(PgfLeftcornerFn* clo, PgfItem* item)
break;
}
case PGF_SYMBOL_LIT:
case PGF_SYMBOL_NE:
// Nothing to be done here
break;
case PGF_SYMBOL_VAR:

View File

@@ -258,6 +258,10 @@ pgf_print_symbol(PgfSymbol sym, GuWriter *wtr, GuExn *err)
gu_printf(wtr, err, "<%d,$%d>", svar->d, svar->r);
break;
}
case PGF_SYMBOL_NE: {
gu_puts("nonExist", wtr, err);
break;
}
default:
gu_impossible();
}

View File

@@ -717,6 +717,13 @@ pgf_read_symbol(PgfReader* rdr)
}
break;
}
case PGF_SYMBOL_NE: {
gu_new_variant(PGF_SYMBOL_NE,
PgfSymbolNE,
&sym, rdr->opool);
gu_return_on_exn(rdr->err, gu_null_variant);
break;
}
default:
pgf_read_tag_error(rdr);
}

View File

@@ -152,6 +152,7 @@ instance Binary Symbol where
put (SymVar n l) = putWord8 2 >> put (n,l)
put (SymKS ts) = putWord8 3 >> put ts
put (SymKP d vs) = putWord8 4 >> put (d,vs)
put SymNE = putWord8 5
get = do tag <- getWord8
case tag of
0 -> liftM2 SymCat get get
@@ -159,6 +160,7 @@ instance Binary Symbol where
2 -> liftM2 SymVar get get
3 -> liftM SymKS get
4 -> liftM2 (\d vs -> SymKP d vs) get get
5 -> return SymNE
_ -> decodingError
instance Binary PArg where

View File

@@ -60,6 +60,7 @@ data Symbol
| SymVar {-# UNPACK #-} !Int {-# UNPACK #-} !Int
| SymKS [Token]
| SymKP [Token] [Alternative]
| SymNE -- non exist
deriving (Eq,Ord,Show)
data Production
= PApply {-# UNPACK #-} !FunId [PArg]