Additions for non-correcting error recovery
This commit is contained in:
@@ -34,7 +34,9 @@ LLmessage(tk)
|
||||
*/
|
||||
register t_token *dotp = ˙
|
||||
|
||||
#ifndef LLNONCORR
|
||||
error("%s missing before %s", symbol2str(tk), symbol2str(dotp->tk_symb));
|
||||
#endif
|
||||
|
||||
aside = *dotp;
|
||||
|
||||
@@ -62,9 +64,15 @@ LLmessage(tk)
|
||||
}
|
||||
}
|
||||
else if (tk < 0) {
|
||||
error("garbage at end of program");
|
||||
error("end of file expected");
|
||||
}
|
||||
else {
|
||||
#ifndef LLNONCORR
|
||||
error("%s deleted", symbol2str(dot.tk_symb));
|
||||
#else
|
||||
error("%s not expected", symbol2str(dot.tk_symb));
|
||||
#endif
|
||||
}
|
||||
else error("%s deleted", symbol2str(dot.tk_symb));
|
||||
tk_nmb_at_last_syn_err = token_nmb;
|
||||
}
|
||||
|
||||
|
||||
@@ -109,7 +109,9 @@ import(int local;)
|
||||
name, otherwise the names in the import list are module names.
|
||||
*/
|
||||
[ FROM
|
||||
IDENT { FromId = dot2leaf(Name);
|
||||
IDENT
|
||||
%substart DefinitionModule;
|
||||
{ FromId = dot2leaf(Name);
|
||||
if (local) {
|
||||
df = lookfor(FromId,enclosing(CurrVis),0,D_USED);
|
||||
}
|
||||
@@ -117,6 +119,7 @@ import(int local;)
|
||||
}
|
||||
]?
|
||||
IMPORT IdentList(&ImportList) ';'
|
||||
%substart DefinitionModule;
|
||||
{ if (FromId) {
|
||||
EnterFromImportList(ImportList, df, FromId);
|
||||
}
|
||||
@@ -226,7 +229,9 @@ ProgramModule
|
||||
register t_def *df;
|
||||
} :
|
||||
MODULE
|
||||
IDENT {
|
||||
IDENT
|
||||
%substart DefinitionModule;
|
||||
{
|
||||
if (state == IMPLEMENTATION) {
|
||||
int len = strlen(dot.TOK_IDF->id_text);
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ SRC_DIR = \
|
||||
TABGEN= $(UTIL_BIN)/tabgen
|
||||
LLGEN = $(UTIL_BIN)/LLgen
|
||||
LLGENOPTIONS = \
|
||||
-v
|
||||
-n
|
||||
|
||||
SRC_G = $(SRC_DIR)/program.g $(SRC_DIR)/declar.g \
|
||||
$(SRC_DIR)/expression.g $(SRC_DIR)/statement.g
|
||||
@@ -28,7 +28,7 @@ SRC_C = $(SRC_DIR)/LLlex.c $(SRC_DIR)/LLmessage.c $(SRC_DIR)/error.c \
|
||||
$(SRC_DIR)/desig.c $(SRC_DIR)/code.c $(SRC_DIR)/lookup.c \
|
||||
$(SRC_DIR)/stab.c
|
||||
GEN_C = tokenfile.c program.c declar.c expression.c statement.c \
|
||||
symbol2str.c char.c Lpars.c casestat.c tmpvar.c scope.c next.c
|
||||
symbol2str.c char.c Lpars.c Lncor.c casestat.c tmpvar.c scope.c next.c
|
||||
CFILES= $(SRC_C) $(GEN_C)
|
||||
|
||||
SRC_H = $(SRC_DIR)/LLlex.h $(SRC_DIR)/chk_expr.h $(SRC_DIR)/class.h \
|
||||
@@ -118,6 +118,7 @@ clean:
|
||||
LLfiles: $(GFILES)
|
||||
$(LLGEN) $(LLGENOPTIONS) $(GFILES)
|
||||
@touch LLfiles
|
||||
@if [ -f Lncor.c ] ; then : ; else touch Lncor.c ; fi
|
||||
|
||||
hfiles: Parameters $(SRC_DIR)/make.hfiles
|
||||
$(SRC_DIR)/make.hfiles Parameters
|
||||
|
||||
@@ -43,7 +43,8 @@ statement(register t_node **pnd;)
|
||||
ActualParameters(&(nd->nd_RIGHT))?
|
||||
|
|
||||
[ BECOMES
|
||||
| '=' { error("':=' expected instead of '='");
|
||||
| %erroneous '='
|
||||
{ error("':=' expected instead of '='");
|
||||
DOT = BECOMES;
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user