public DefaultRubyParser(ParserSupport support) { this.support = support; lexer = new RubyYaccLexer(); lexer.setParserSupport(support); support.setLexer(lexer); }
private int plus(boolean spaceSeen) throws IOException { int c = src.read(); if (lex_state == LexState.EXPR_FNAME || lex_state == LexState.EXPR_DOT) { setState(LexState.EXPR_ARG); if (c == '@') { yaccValue = new Token("+@", getPosition()); return Tokens.tUPLUS; yaccValue = new Token("+", getPosition()); return Tokens.tPLUS; setState(LexState.EXPR_BEG); yaccValue = new Token("+", getPosition()); return Tokens.tOP_ASGN; if (isBEG() || isSpaceArg(c, spaceSeen)) { //FIXME: arg_ambiguous missing if (isARG()) arg_ambiguous(); setState(LexState.EXPR_BEG); src.unread(c); if (Character.isDigit(c)) { c = '+'; return parseNumber(c); yaccValue = new Token("+", getPosition()); return Tokens.tUPLUS; setState(LexState.EXPR_BEG); src.unread(c); yaccValue = new Token("+", getPosition()); warn_balanced(c, spaceSeen, "+", "unary operator");
private int slash(boolean spaceSeen) throws IOException { if (isBEG()) { lex_strterm = new StringTerm(str_regexp, '\0', '/'); yaccValue = new Token("/",getPosition()); return Tokens.tREGEXP_BEG; } int c = src.read(); if (c == '=') { yaccValue = new Token("/", getPosition()); setState(LexState.EXPR_BEG); return Tokens.tOP_ASGN; } src.unread(c); if (isSpaceArg(c, spaceSeen)) { arg_ambiguous(); lex_strterm = new StringTerm(str_regexp, '\0', '/'); yaccValue = new Token("/",getPosition()); return Tokens.tREGEXP_BEG; } determineExpressionState(); yaccValue = new Token("/", getPosition()); warn_balanced(c, spaceSeen, "/", "regexp literal"); return Tokens.tDIVIDE; }
if (token == 0 && src.getLine() == 0) detectUTF8BOM(); if (tok == Tokens.tSTRING_END || tok == Tokens.tREGEXP_END) { lex_strterm = null; setState(LexState.EXPR_END); getPosition(); spaceSeen = true; continue; case '#': /* it's a comment */ if (readComment() == EOF) return EOF; getPosition(); setState(LexState.EXPR_BEG); return '\n'; case '*': return star(spaceSeen); case '!': return bang(); case '=': throw new SyntaxException(PID.STRING_HITS_EOF, getPosition(), getCurrentLine(), "embedded document meets end of file"); determineExpressionState(); c = src.read(); if (c == '=') {
ISourcePosition position = lexer.getPosition(); str.setEncoding(lexer.getEncoding()); ISourcePosition position; str.append('\n'); if (src.peek(RubyYaccLexer.EOF)) syntaxError(src); position = lexer.getPosition(); } while (!src.matchMarker(marker, indent, true)); } else { case '@': src.unread(c); lexer.setValue(new Token("#" + c, lexer.getPosition())); return Tokens.tSTRING_DVAR; case '{': lexer.setValue(new Token("#" + c, lexer.getPosition())); return Tokens.tSTRING_DBEG; lexer.yaccValue = lexer.createStrNode(lexer.getPosition(), str, 0); return Tokens.tSTRING_CONTENT; position = lexer.getPosition(); } while (!src.matchMarker(marker, indent, true)); lexer.setStrTerm(new StringTerm(-1, '\0', '\0')); lexer.yaccValue = lexer.createStrNode(position, str, 0); return Tokens.tSTRING_CONTENT;
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { ByteList aChar = ByteList.create(""); aChar.setEncoding(lexer.getEncoding()); yyVal = lexer.createStrNode(((Token)yyVals[0+yyTop]).getPosition(), aChar, 0); return yyVal; } };
lexer.setValue(new Token("\"", lexer.getPosition())); return Tokens.tSTRING_END; lexer.getPosition(); return ' '; case '@': src.unread(c); lexer.setValue(new Token("#" + c, lexer.getPosition())); return Tokens.tSTRING_DVAR; case '{': lexer.setValue(new Token("#" + c, lexer.getPosition())); return Tokens.tSTRING_DBEG; lexer.setValue(lexer.createStrNode(lexer.getPosition(), buffer, flags)); return Tokens.tSTRING_CONTENT;
if (token == 0 && src.getLine() == 0) detectUTF8BOM(); if (tok == Tokens.tSTRING_END || tok == Tokens.tREGEXP_END) { lex_strterm = null; setState(LexState.EXPR_END); getPosition(); spaceSeen = true; continue; case '#': /* it's a comment */ if (readComment() == EOF) return EOF; getPosition(); setState(LexState.EXPR_BEG); return '\n'; case '*': return star(spaceSeen); case '!': return bang(); case '=': throw new SyntaxException(PID.STRING_HITS_EOF, getPosition(), getCurrentLine(), "embedded document meets end of file"); determineExpressionState(); c = src.read(); if (c == '=') {
private int slash(boolean spaceSeen) throws IOException { if (isBEG()) { lex_strterm = new StringTerm(str_regexp, '\0', '/'); yaccValue = new Token("/",getPosition()); return Tokens.tREGEXP_BEG; } int c = src.read(); if (c == '=') { yaccValue = new Token("/", getPosition()); setState(LexState.EXPR_BEG); return Tokens.tOP_ASGN; } src.unread(c); if (isSpaceArg(c, spaceSeen)) { arg_ambiguous(); lex_strterm = new StringTerm(str_regexp, '\0', '/'); yaccValue = new Token("/",getPosition()); return Tokens.tREGEXP_BEG; } determineExpressionState(); yaccValue = new Token("/", getPosition()); warn_balanced(c, spaceSeen, "/", "regexp literal"); return Tokens.tDIVIDE; }
ISourcePosition position = lexer.getPosition(); str.setEncoding(lexer.getEncoding()); ISourcePosition position; str.append('\n'); if (src.peek(RubyYaccLexer.EOF)) syntaxError(src); position = lexer.getPosition(); } while (!src.matchMarker(marker, indent, true)); } else { case '@': src.unread(c); lexer.setValue(new Token("#" + c, lexer.getPosition())); return Tokens.tSTRING_DVAR; case '{': lexer.setValue(new Token("#" + c, lexer.getPosition())); return Tokens.tSTRING_DBEG; lexer.yaccValue = lexer.createStrNode(lexer.getPosition(), str, 0); return Tokens.tSTRING_CONTENT; position = lexer.getPosition(); } while (!src.matchMarker(marker, indent, true)); lexer.setStrTerm(new StringTerm(-1, '\0', '\0')); lexer.yaccValue = lexer.createStrNode(position, str, 0); return Tokens.tSTRING_CONTENT;
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { ByteList aChar = ByteList.create(""); aChar.setEncoding(lexer.getEncoding()); yyVal = lexer.createStrNode(((Token)yyVals[0+yyTop]).getPosition(), aChar, 0); return yyVal; } };
lexer.setValue(new Token("\"", lexer.getPosition())); return Tokens.tSTRING_END; lexer.getPosition(); return ' '; case '@': src.unread(c); lexer.setValue(new Token("#" + c, lexer.getPosition())); return Tokens.tSTRING_DVAR; case '{': lexer.setValue(new Token("#" + c, lexer.getPosition())); return Tokens.tSTRING_DBEG; lexer.setValue(lexer.createStrNode(lexer.getPosition(), buffer, flags)); return Tokens.tSTRING_CONTENT;
private int plus(boolean spaceSeen) throws IOException { int c = src.read(); if (lex_state == LexState.EXPR_FNAME || lex_state == LexState.EXPR_DOT) { setState(LexState.EXPR_ARG); if (c == '@') { yaccValue = new Token("+@", getPosition()); return Tokens.tUPLUS; yaccValue = new Token("+", getPosition()); return Tokens.tPLUS; setState(LexState.EXPR_BEG); yaccValue = new Token("+", getPosition()); return Tokens.tOP_ASGN; if (isBEG() || isSpaceArg(c, spaceSeen)) { //FIXME: arg_ambiguous missing if (isARG()) arg_ambiguous(); setState(LexState.EXPR_BEG); src.unread(c); if (Character.isDigit(c)) { c = '+'; return parseNumber(c); yaccValue = new Token("+", getPosition()); return Tokens.tUPLUS; setState(LexState.EXPR_BEG); src.unread(c); yaccValue = new Token("+", getPosition()); warn_balanced(c, spaceSeen, "+", "unary operator");
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { ByteList aChar = ByteList.create(""); aChar.setEncoding(lexer.getEncoding()); yyVal = lexer.createStrNode(((Token)yyVals[0+yyTop]).getPosition(), aChar, 0); return yyVal; } };
public Ruby20Parser(ParserSupport19 support) { this.support = support; lexer = new RubyYaccLexer(false); lexer.setParserSupport(support); support.setLexer(lexer); }
setState(LexState.EXPR_ARG); if (c == '@') { yaccValue = new Token("-@", getPosition()); return Tokens.tUMINUS; yaccValue = new Token("-", getPosition()); return Tokens.tMINUS; setState(LexState.EXPR_BEG); yaccValue = new Token("-", getPosition()); return Tokens.tOP_ASGN; setState(LexState.EXPR_ARG); yaccValue = new Token("->", getPosition()); return Tokens.tLAMBDA; if (isBEG() || isSpaceArg(c, spaceSeen)) { if (isARG()) arg_ambiguous(); setState(LexState.EXPR_BEG); src.unread(c); yaccValue = new Token("-", getPosition()); if (Character.isDigit(c)) { return Tokens.tUMINUS_NUM; setState(LexState.EXPR_BEG); src.unread(c); yaccValue = new Token("-", getPosition()); warn_balanced(c, spaceSeen, "-", "unary operator"); return Tokens.tMINUS;
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { ByteList aChar = ByteList.create(""); aChar.setEncoding(lexer.getEncoding()); yyVal = lexer.createStrNode(((Token)yyVals[0+yyTop]).getPosition(), aChar, 0); return yyVal; } };
public Ruby19Parser(ParserSupport19 support) { this.support = support; lexer = new RubyYaccLexer(false); lexer.setParserSupport(support); support.setLexer(lexer); }
setState(LexState.EXPR_ARG); if (c == '@') { yaccValue = new Token("-@", getPosition()); return Tokens.tUMINUS; yaccValue = new Token("-", getPosition()); return Tokens.tMINUS; setState(LexState.EXPR_BEG); yaccValue = new Token("-", getPosition()); return Tokens.tOP_ASGN; setState(LexState.EXPR_ARG); yaccValue = new Token("->", getPosition()); return Tokens.tLAMBDA; if (isBEG() || isSpaceArg(c, spaceSeen)) { if (isARG()) arg_ambiguous(); setState(LexState.EXPR_BEG); src.unread(c); yaccValue = new Token("-", getPosition()); if (Character.isDigit(c)) { return Tokens.tUMINUS_NUM; setState(LexState.EXPR_BEG); src.unread(c); yaccValue = new Token("-", getPosition()); warn_balanced(c, spaceSeen, "-", "unary operator"); return Tokens.tMINUS;
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { ByteList aChar = ByteList.create((String) ((Token)yyVals[0+yyTop]).getValue()); aChar.setEncoding(lexer.getEncoding()); yyVal = lexer.createStrNode(((Token)yyVals[-1+yyTop]).getPosition(), aChar, 0); return yyVal; } };