// Path: src/stone/Parser.java
// public static Parser rule() { return rule(null); }
// 
// Path: src/stone/Parser.java
// public static class Operators extends HashMap<String,Precedence> {
//     public static boolean LEFT = true;
//     public static boolean RIGHT = false;
//     public void add(String name, int prec, boolean leftAssoc) {
//         put(name, new Precedence(prec, leftAssoc));
//     }
// }


import static stone.Parser.rule;
import java.util.HashSet;
import stone.Parser.Operators;
import stone.ast.*;
package stone;

public class BasicParser {
    HashSet<String> reserved = new HashSet<String>();
    Operators operators = new Operators();
    Parser expr0 = rule();
    Parser primary = rule(PrimaryExpr.class)
        .or(rule().sep("(").ast(expr0).sep(")"),
            rule().number(NumberLiteral.class),
// Path: src/stone/Parser.java
// public static Parser rule() { return rule(null); }
// 
// Path: src/stone/Parser.java
// public static class Operators extends HashMap<String,Precedence> {
//     public static boolean LEFT = true;
//     public static boolean RIGHT = false;
//     public void add(String name, int prec, boolean leftAssoc) {
//         put(name, new Precedence(prec, leftAssoc));
//     }
// }


// Path: src/stone/BasicParser.java
import static stone.Parser.rule;
import java.util.HashSet;
import stone.Parser.Operators;
import stone.ast.*;

package stone;

public class BasicParser {
    HashSet<String> reserved = new HashSet<String>();
    Operators operators = new Operators();
    Parser expr0 = rule();
    Parser primary = rule(PrimaryExpr.class)
        .or(rule().sep("(").ast(expr0).sep(")"),
            rule().number(NumberLiteral.class),
            rule().identifier(Name.class, reserved),