Ejemplo de reconocedor de llaves balanceadas. /*Opciones de personalización del parser*/ options { LOOKAHEAD = 1; CHOICE_AMBIGUITY_CHECK = 2; OTHER_AMBIGUITY_CHECK = 1; STATIC = true; DEBUG_PARSER = false; DEBUG_LOOKAHEAD = false; DEBUG_TOKEN_MANAGER = false; ERROR_REPORTING = true; JAVA_UNICODE_ESCAPE = false; UNICODE_INPUT = false; IGNORE_CASE = false; USER_TOKEN_MANAGER = false; USER_CHAR_STREAM = false; BUILD_PARSER = true; BUILD_TOKEN_MANAGER = true; SANITY_CHECK = true; FORCE_LA_CHECK = false; } PARSER_BEGIN(Simple) public class Simple { public static void main(String args[]) throws ParseException { Simple1 parser = new Simple(System.in); parser.Input(); } } PARSER_END(Simple) /*secuencias SKIP*/ SKIP : { " " | "\t" | "\n" | "\r" } /*secuencias TOKEN*/ TOKEN : { | } /*Métodos correspondientes a las reglas*/ void Input() : {} { LlavesBalanceadas() ";" } void LlavesBalanceadas() : {} { LlaveApertura() [ LlavesBalanceadas() ] LlaveCierre() } void LlaveApertura(): {} { } void LlaveCierre(): {} { }