Parser Implementation

As expected for Prolog, this is a recursive top-down parser.

The algorithm handles ambiguity in the Prolog grammar through setjmp.s

Define:

1. Volatile:

1. TRY:

1. TR/3:

1. FAIL:

Functions:

1. static void GNextToken(CACHE_TYPE1):

1. static void checkfor(Term, JMPBUFF *, encoding_t CACHE_TYPE):

1. static Term ParseArgs(Atom, Term, JMPBUFF *, Term, encoding_t, Term CACHE_TYPE):

1. static Term ParseList(JMPBUFF *, encoding_t, Term CACHE_TYPE):

1. static Term ParseTerm(int, JMPBUFF *, encoding_t, Term CACHE_TYPE):

1. Term Yap_tokRep(void *tokptr): : convert a token to text.

1. const char * Yap_tokText(void *tokptr):

1. static void syntax_msg(const char *msg,...):

1. VarEntry * Yap_LookupVar(const char *var, int lineno, int linepos):

1. static Term VarNames(VarEntry *p, Term l USES_REGS):

1. Term Yap_VarNames(VarEntry *p, Term l):

1. static Term Singletons(VarEntry *p, bool var_only, Term l USES_REGS):

1. Term Yap_Singletons(VarEntry *p, bool vars_only, Term l):

1. static Term Variables(VarEntry *p, Term l USES_REGS):

1. Term Yap_Variables(VarEntry *p, Term l):

1. static int IsPrefixOp(Atom op, int pptr, int rpptr, Term cmod USES_REGS):

1. int Yap_IsPrefixOp(Atom op, int pptr, int rpptr):

1. static int IsInfixOp(Atom op, int pptr, int lpptr, int *rpptr, Term cmod USES_REGS):

1. int Yap_IsInfixOp(Atom op, int pptr, int lpptr, int *rpptr):

1. static int IsPosfixOp(Atom op, int pptr, int lpptr, Term cmod USES_REGS):

1. int Yap_IsPosfixOp(Atom op, int pptr, int lpptr):

1. static void GNextToken(USES_REGS1):

1. static void checkfor(Term c, JMPBUFF *FailBuff, encoding_t enc USES_REGS):

1. static Term ParseArgs(Atom a, Term close, JMPBUFF *FailBuff, Term arg1, encoding_t enc, Term cmod USES_REGS):

1. static Term MakeAccessor(Term t, Functor f USES_REGS):

1. static Term ParseList(JMPBUFF *FailBuff, encoding_t enc, Term cmod USES_REGS):

1. static Term ParseTerm(int prio, JMPBUFF *FailBuff, encoding_t enc, Term cmod USES_REGS):

1. Term Yap_Parse(UInt prio, encoding_t enc, Term cmod):

Typedef:

1. typedef struct jmp_buff_struct JMPBUFF: