public RubyParser(LexerSource source, IRubyWarnings warnings) { this.support = new ParserSupport(); this.lexer = new RubyLexer(support, source, warnings); support.setLexer(lexer); support.setWarnings(warnings); }
@Override public Object execute(ParserSupport support, RubyLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { yyVal = support.appendToBlock(((Node)yyVals[-2+yyTop]), support.newline_node(((Node)yyVals[0+yyTop]), support.getPosition(((Node)yyVals[0+yyTop])))); return yyVal; } };
@Override public Object execute(ParserSupport support, RubyLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { Node node = support.splat_array(((Node)yyVals[-2+yyTop])); if (node != null) { yyVal = support.list_append(node, ((Node)yyVals[0+yyTop])); } else { yyVal = support.arg_append(((Node)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop])); } return yyVal; } };
@Override public Object execute(ParserSupport support, RubyLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { yyVal = support.arg_append(((Node)yyVals[-3+yyTop]), support.remove_duplicate_keys(((HashNode)yyVals[-1+yyTop]))); yyVal = support.arg_blk_pass((Node)yyVal, ((BlockPassNode)yyVals[0+yyTop])); return yyVal; } };
@Override public Object execute(ParserSupport support, RubyLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { yyVal = support.arg_append(((Node)yyVals[-3+yyTop]), support.remove_duplicate_keys(((HashNode)yyVals[-1+yyTop]))); return yyVal; } };
private void initLexer(String title) { LexerSource lexerSource = new ByteListLexerSource(title, 0, new ByteList(utf8Bytes), null); lexerSource.setEncoding(UTF8Encoding.INSTANCE); ParserSupport parserSupport = new ParserSupport(); lexer = new RubyLexer(parserSupport, lexerSource, new NullWarnings(Ruby.getGlobalRuntime())); parserSupport.setLexer(lexer); parserSupport.setConfiguration(new ParserConfiguration(Ruby.getGlobalRuntime(), 0, false, true, false)); parserSupport.setResult(new RubyParserResult()); parserSupport.setWarnings(new NullWarnings(Ruby.getGlobalRuntime())); parserSupport.initTopLocalVariables(); lexer.setState(LexingCommon.EXPR_BEG); }
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { if (((Node)yyVals[0+yyTop]) != null) { /* last expression should not be void */ if (((Node)yyVals[0+yyTop]) instanceof BlockNode) { support.checkUselessStatement(((BlockNode)yyVals[0+yyTop]).getLast()); } else { support.checkUselessStatement(((Node)yyVals[0+yyTop])); } } support.getResult().setAST(support.addRootNode(((Node)yyVals[0+yyTop]), support.getPosition(((Node)yyVals[0+yyTop])))); return yyVal; } };
/** The parse method use an lexer stream and parse it to an AST node * structure */ public RubyParserResult parse(ParserConfiguration configuration) throws IOException { support.reset(); support.setConfiguration(configuration); support.setResult(new RubyParserResult()); yyparse(lexer, configuration.isDebug() ? new YYDebug() : null); return support.getResult(); } }
@Override public Object execute(ParserSupport support, RubyLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { yyVal = support.appendToBlock(((Node)yyVals[-3+yyTop]), support.newUndef(((Node)yyVals[-3+yyTop]).getPosition(), ((Node)yyVals[0+yyTop]))); return yyVal; } };
@Override public Object execute(ParserSupport support, RubyLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { /* ENEBO: Removed !compile_for_eval which probably is to reduce warnings*/ if (((Node)yyVals[0+yyTop]) != null) { /* last expression should not be void */ if (((Node)yyVals[0+yyTop]) instanceof BlockNode) { support.checkUselessStatement(((BlockNode)yyVals[0+yyTop]).getLast()); } else { support.checkUselessStatement(((Node)yyVals[0+yyTop])); } } support.getResult().setAST(support.addRootNode(((Node)yyVals[0+yyTop]))); return yyVal; } };
public Node arg_append(Node node1, Node node2) { if (node1 == null) return new ArrayNode(node2.getPosition(), node2); if (node1 instanceof ListNode) return ((ListNode) node1).add(node2); if (node1 instanceof BlockPassNode) return arg_append(((BlockPassNode) node1).getBodyNode(), node2); if (node1 instanceof ArgsPushNode) { ArgsPushNode pushNode = (ArgsPushNode) node1; Node body = pushNode.getSecondNode(); return new ArgsCatNode(pushNode.getPosition(), pushNode.getFirstNode(), new ArrayNode(body.getPosition(), body).add(node2)); } return new ArgsPushNode(position(node1, node2), node1, node2); }
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { yyVal = support.arg_append(((Node)yyVals[-3+yyTop]), new Hash19Node(lexer.getPosition(), ((ListNode)yyVals[-1+yyTop]))); yyVal = support.arg_blk_pass((Node)yyVal, ((BlockPassNode)yyVals[0+yyTop])); return yyVal; } };
@Override public Object execute(ParserSupport support, RubyLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { lexer.setState(EXPR_BEG); support.initTopLocalVariables(); return yyVal; } };
@Override public Object execute(ParserSupport support, RubyLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { yyVal = support.appendToBlock(((ListNode)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop])); return yyVal; } };
/** * @fixme position **/ public Node node_assign(Node lhs, Node rhs) { if (lhs == null) return null; Node newNode = lhs; checkExpression(rhs); if (lhs instanceof AssignableNode) { ((AssignableNode) lhs).setValueNode(rhs); } else if (lhs instanceof IArgumentNode) { IArgumentNode invokableNode = (IArgumentNode) lhs; return invokableNode.setArgsNode(arg_add(lhs.getPosition(), invokableNode.getArgsNode(), rhs)); } return newNode; }
public void setWarnings(IRubyWarnings warnings) { support.setWarnings(warnings); lexer.setWarnings(warnings); } // line 166 "-"
@Deprecated public RubyParser(ParserSupport support, LexerSource source) { this.support = support; lexer = new RubyLexer(support, source); support.setLexer(lexer); }
public DefaultRubyParser() { this(new ParserSupport()); }
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { yyVal = support.arg_append(((Node)yyVals[-3+yyTop]), new Hash19Node(lexer.getPosition(), ((ListNode)yyVals[-1+yyTop]))); return yyVal; } };
/** * @fixme position **/ public Node node_assign(Node lhs, Node rhs) { if (lhs == null) return null; Node newNode = lhs; value_expr(lexer, rhs); if (lhs instanceof AssignableNode) { ((AssignableNode) lhs).setValueNode(rhs); } else if (lhs instanceof IArgumentNode) { IArgumentNode invokableNode = (IArgumentNode) lhs; return invokableNode.setArgsNode(arg_add(lhs.getPosition(), invokableNode.getArgsNode(), rhs)); } return newNode; }