Example #1
0
lexid *lextable::enter(const char *str, int lextype)
{
  int h = hash(str);
  while (1) {
    int i = (h & LEXTABLESIZE - 1);
    lexid *entry = table[i];
    if (entry == NULL) {
      // there is no entry in the lex table
      // but is it a reserved word in a different case context?
      if (reserved(str)) {
	// yes, it is.  get the entry in the reserved words table
	return enter_reserved(str);
      } else {
	/* no, it is not.  Enter it and return */
	table[i] = entry = new lexid(str, lextype);
	return (entry);
      }
    } else if (strcmp(entry->getname(), str) == 0) {
      return (entry);
    } else {
      /* try again */
      h = rehash(h);
    }
  }
}
Example #2
0
lextable::lextable()
{
  int i;			/* loop index. */
  for (i = 0; i < LEXTABLESIZE; i++)
    table[i] = NULL;

  // table[] is case sensitive and rtable[] is case insensitive
  // before entering new entry, the string is checked again
  // the reserve table in lower case.  Therefore, all reserved words
  // are case insensitive and everything else are case sensitive
  enter_reserved("end", END);
  enter_reserved("program", PROGRAM);
  // enter_reserved("process",PROCESS); 
  enter_reserved("procedure", PROCEDURE);
  enter_reserved("endprocedure", ENDPROCEDURE);
  enter_reserved("function", FUNCTION);
  enter_reserved("endfunction", ENDFUNCTION);
  enter_reserved("rule", RULE);
  enter_reserved("endrule", ENDRULE);
  enter_reserved("ruleset", RULESET);
  enter_reserved("endruleset", ENDRULESET);
  enter_reserved("alias", ALIAS);
  enter_reserved("endalias", ENDALIAS);
  enter_reserved("if", IF);
  enter_reserved("then", THEN);
  enter_reserved("elsif", ELSIF);
  enter_reserved("else", ELSE);
  enter_reserved("endif", ENDIF);
  enter_reserved("switch", SWITCH);
  enter_reserved("case", CASE);
  enter_reserved("endswitch", ENDSWITCH);
  enter_reserved("for", FOR);
  enter_reserved("forall", FORALL);
  enter_reserved("exists", EXISTS);
  enter_reserved("in", IN);
  enter_reserved("do", DO);
  enter_reserved("endfor", ENDFOR);
  enter_reserved("endforall", ENDFORALL);
  enter_reserved("endexists", ENDEXISTS);
  enter_reserved("while", WHILE);
  enter_reserved("endwhile", ENDWHILE);
  enter_reserved("return", RETURN);
  enter_reserved("to", TO);
  enter_reserved("begin", bEGIN);
  enter_reserved("by", BY);
  enter_reserved("clear", CLEAR);
  enter_reserved("error", ERROR);
  enter_reserved("assert", ASSERT);
  enter_reserved("put", PUT);
  enter_reserved("const", CONST);
  enter_reserved("type", TYPE);
  enter_reserved("var", VAR);
  enter_reserved("enum", ENUM);
  enter_reserved("interleaved", INTERLEAVED);
  enter_reserved("record", RECORD);
  enter_reserved("array", ARRAY);
  enter_reserved("of", OF);
  enter_reserved("endrecord", ENDRECORD);
  enter_reserved("startstate", STARTSTATE);
  enter_reserved("endstartstate", ENDSTARTSTATE);
  enter_reserved("invariant", INVARIANT);
  enter_reserved("traceuntil", TRACEUNTIL);

  /* IM: PCTL (until already present) */
  enter_reserved("pctl_next", NEXT);
  enter_reserved("pctl", PCTL);

  /* scalarset */
  enter_reserved("scalarset", SCALARSET);
  enter_reserved("ismember", ISMEMBER);

  /* undefined */
  enter_reserved("undefine", UNDEFINE);
  enter_reserved("isundefined", ISUNDEFINED);
  enter_reserved("undefined", UNDEFINED);

  /* general union */
  enter_reserved("union", UNION);

  /* multiset */
  enter_reserved("multiset", MULTISET);
  enter_reserved("multisetremove", MULTISETREMOVE);
  enter_reserved("multisetremovepred", MULTISETREMOVEPRED);
  enter_reserved("multisetadd", MULTISETADD);
  enter_reserved("multisetcount", MULTISETCOUNT);
  enter_reserved("choose", CHOOSE);
  enter_reserved("endchoose", ENDCHOOSE);

  /* first definitions. */
  enter_reserved("boolean", ID);
  enter_reserved("true", ID);
  enter_reserved("false", ID);

  /* AP: added reserved words REAL and NEVERCLAIM *//* IM: NEVERCLAIM deleted */
  enter_reserved("real", REAL);
  enter_reserved("log", LOG);
  enter_reserved("log10", LOG10);
  enter_reserved("exp", EXP);
  enter_reserved("sin", SIN);
  enter_reserved("cos", COS);
  enter_reserved("tan", TAN);
  enter_reserved("fabs", FABS);
  enter_reserved("floor", FLOOR);
  enter_reserved("ceil", CEIL);
  enter_reserved("sqrt", SQRT);
  enter_reserved("fmod", FMOD);
  enter_reserved("pow", POW);
  enter_reserved("asin", ASIN);
  enter_reserved("acos", ACOS);
  enter_reserved("atan", ATAN);
  enter_reserved("sinh", SINH);
  enter_reserved("cosh", COSH);
  enter_reserved("tanh", TANH);

  /* IM: other two reserved words */
  enter_reserved("externfun", EXTERNFUN);
  enter_reserved("externproc", EXTERNPROC);
}
Example #3
0
lextable::lextable()
{
  int i; /* loop index. */
  for( i=0; i < LEXTABLESIZE; i++) table[i] = NULL;

  // table[] is case sensitive and rtable[] is case insensitive
  // before entering new entry, the string is checked again
  // the reserve table in lower case.  Therefore, all reserved words
  // are case insensitive and everything else are case sensitive
  enter_reserved("end",END);
  enter_reserved("program",PROGRAM); 
  // enter_reserved("process",PROCESS); 
  enter_reserved("procedure",PROCEDURE);
  enter_reserved("endprocedure",ENDPROCEDURE);
  enter_reserved("function",FUNCTION);
  enter_reserved("endfunction",ENDFUNCTION);
  enter_reserved("rule",RULE);
  enter_reserved("endrule",ENDRULE);
  enter_reserved("ruleset",RULESET);
  enter_reserved("endruleset",ENDRULESET);
  enter_reserved("alias",ALIAS);
  enter_reserved("endalias",ENDALIAS);
  enter_reserved("if",IF);
  enter_reserved("then",THEN);
  enter_reserved("elsif",ELSIF);
  enter_reserved("else",ELSE);
  enter_reserved("endif",ENDIF);
  enter_reserved("switch",SWITCH);
  enter_reserved("case",CASE);
  enter_reserved("endswitch",ENDSWITCH);
  enter_reserved("for",FOR);
  enter_reserved("forall",FORALL);
  enter_reserved("exists",EXISTS);
  enter_reserved("in",IN);
  enter_reserved("do",DO);
  enter_reserved("endfor",ENDFOR);
  enter_reserved("endforall",ENDFORALL);
  enter_reserved("endexists",ENDEXISTS);
  enter_reserved("while",WHILE);
  enter_reserved("endwhile",ENDWHILE);
  enter_reserved("return",RETURN);
  enter_reserved("to", TO);
  enter_reserved("begin",bEGIN);
  enter_reserved("by",BY);
  enter_reserved("clear",CLEAR);
  enter_reserved("error",ERROR);
  enter_reserved("assert",ASSERT);
  enter_reserved("put",PUT);
  enter_reserved("const",CONST);
  enter_reserved("type",TYPE);
  enter_reserved("var",VAR);
  enter_reserved("enum",ENUM);
  enter_reserved("interleaved",INTERLEAVED);
  enter_reserved("record",RECORD);
  enter_reserved("array",ARRAY);
  enter_reserved("of",OF);
  enter_reserved("endrecord",ENDRECORD);
  enter_reserved("startstate",STARTSTATE);
  enter_reserved("endstartstate",ENDSTARTSTATE);
  enter_reserved("invariant", INVARIANT);
  enter_reserved("traceuntil",TRACEUNTIL);

  /* liveness */
  enter_reserved("fairness", FAIRNESS);
  enter_reserved("fairnessset",FAIRNESSSET);
  enter_reserved("endfairnessset",ENDFAIRNESSSET);
  enter_reserved("liveness", LIVENESS);
  enter_reserved("livenessset",LIVENESSSET);
  enter_reserved("endlivenessset",ENDLIVENESSSET);
  enter_reserved("always", ALWAYS);
  enter_reserved("eventually", EVENTUALLY);
  enter_reserved("until", UNTIL);
  enter_reserved("unfair", UNFAIR);

  /* scalarset */
  enter_reserved("scalarset",SCALARSET);
  enter_reserved("ismember",ISMEMBER);

  /* undefined */
  enter_reserved("undefine",UNDEFINE);
  enter_reserved("isundefined",ISUNDEFINED);
  enter_reserved("undefined",UNDEFINED);

  /* general union */
  enter_reserved("union",UNION);

  /* multiset */
  enter_reserved("multiset",MULTISET);
  enter_reserved("multisetremove",MULTISETREMOVE);
  enter_reserved("multisetremovepred",MULTISETREMOVEPRED);
  enter_reserved("multisetadd",MULTISETADD);
  enter_reserved("multisetcount",MULTISETCOUNT);
  enter_reserved("choose",CHOOSE);
  enter_reserved("endchoose",ENDCHOOSE);

  /* first definitions. */
  enter_reserved("boolean",ID);
  enter_reserved("true",ID);
  enter_reserved("false",ID);
}