// attempt to continue the expression
continueExpr(b, minPrecedence);
}
- /*
- private Grammar parseGrammar(Grammar g) throws IOException {
- int tok = getToken();
- if (g != null)
- switch(tok) {
- case BITOR: return new Grammar.Alternative(g, parseGrammar(null));
- case ADD: return parseGrammar(new Grammar.Repetition(g, 1, Integer.MAX_VALUE));
- case MUL: return parseGrammar(new Grammar.Repetition(g, 0, Integer.MAX_VALUE));
- case HOOK: return parseGrammar(new Grammar.Repetition(g, 0, 1));
- }
- Grammar g0 = null;
- switch(tok) {
- //case NUMBER: g0 = new Grammar.Literal(number); break;
- case NAME: g0 = new Grammar.Reference(string); break;
- case STRING:
- g0 = new Grammar.Literal(string);
- if (peekToken() == DOT) {
- String old = string;
- consume(DOT);
- consume(DOT);
- consume(STRING);
- if (old.length() != 1 || string.length() != 1) throw pe("literal ranges must be single-char strings");
- g0 = new Grammar.Range(old.charAt(0), string.charAt(0));
- }
- break;
- case LP: g0 = parseGrammar(null); consume(RP); break;
- default: pushBackToken(); return g;
- }
- if (g == null) return parseGrammar(g0);
- return parseGrammar(new Grammar.Juxtaposition(g, g0));
- }
- */
+
/**
* Assuming that a complete assignable (lvalue) has just been
* parsed and the object and key are on the stack,
// force the default case
tok = -1;
switch(tok) {
- /*
- case GRAMMAR: {
- b.add(parserLine, GET_PRESERVE);
- Grammar g = parseGrammar(null);
- if (peekToken() == LC) {
- g.action = new JSFunction(sourceName, parserLine, null);
- parseBlock((JSFunction)g.action);
- ((JSFunction)g.action).add(parserLine, LITERAL, null); // in case we "fall out the bottom", return NULL
- ((JSFunction)g.action).add(parserLine, RETURN);
- }
- b.add(parserLine, MAKE_GRAMMAR, g);
- b.add(parserLine, PUT);
- break;
- }
- */
case ASSIGN_BITOR: case ASSIGN_BITXOR: case ASSIGN_BITAND: case ASSIGN_LSH: case ASSIGN_RSH: case ASSIGN_URSH:
case ASSIGN_MUL: case ASSIGN_DIV: case ASSIGN_MOD: case ASSIGN_ADD: case ASSIGN_SUB: case ADD_TRAP: case DEL_TRAP: {
if (tok != ADD_TRAP && tok != DEL_TRAP)