package org.softlang.company.features.parser; import static org.softlang.company.features.parser.CompanyLexer.*; import parseLib.acceptor.*; import parseLib.util.Input; /** * A combinator-based acceptor for companies. */ public class CompanyAcceptor extends Acceptor { /** * Parse companies. */ public static Acceptor company() { return new Acceptor() { public boolean accept(Input i) { return ( sequence( SPECIAL("company"), STRING, SPECIAL("{"), star(department()), SPECIAL("}"), EOF // Test that all input has been consumed. )).accept(i); } }; } /** * Parse departments. */ public static Acceptor department() { return new Acceptor() { public boolean accept(Input i) { return ( sequence( SPECIAL("department"), STRING, SPECIAL("{"), employee("manager"), star(employee("employee")), star(department()), SPECIAL("}") )).accept(i); } }; } /** * Parse employees. */ public static Acceptor employee(final String keyword) { return new Acceptor() { public boolean accept(Input i) { return ( sequence( SPECIAL(keyword), STRING, SPECIAL("{"), SPECIAL("address"), STRING, SPECIAL("salary"), FLOAT, SPECIAL("}") )).accept(i); } }; } /** * Invoke start symbol. */ public boolean accept(Input i) { return company().accept(i); } }