Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

206
Vistas
¿Qué me falta en mi analizador para este texto en JavaCC?

Así que estoy aprendiendo a crear un analizador en JavaCC. Este será el tipo de lenguaje que se espera que analicemos.

 bus(59) -> "Beach Shuttle" at 9:30 10:30 11:30 12:00 13:00 14:00 15:00 via stops 3 76 44 89 161 32 free bus(1234) -> "The Hills Loop" at 7:15 7:30 7:45 8:05 8:20 8:40 9:00 via stops 99 97 77 66 145 168 bus(7) -> "City Transit" at 16:08 16:39 16:55 17:01 17:12 17:28 via stops 2 1 5 7 13 119
  1. Tenemos algunas reglas que el analizador también debe seguir.
  2. Debemos ignorar los espacios en blanco a excepción de los que están dentro de "".
  3. Podemos tener cualquier número de declaraciones de autobús y el orden dentro será siempre el mismo.
  4. El nombre del bus (entre comillas dobles) contendrá cualquier número de caracteres.
  5. Los tiempos están en formato 24hopur hh::mm y debe haber uno por declaración de bus.
  6. Los números de parada son todas ubicaciones predefinidas y debe haber al menos 2 por declaración de autobús.
  7. La palabra libre puede o no estar presente para cada declaración de autobús.

A continuación se muestra mi implementación hasta ahora, trataré de explicar mi proceso de pensamiento.

 PARSER_BEGIN(MyParser) import java.io.*; public class MyParser { public static void parse(String fileName) throws IOException, ParseException { MyParser parser = new MyParser(new FileInputStream(fileName)); parser.dsl(); } } PARSER_END(MyParser); //Remainder of the .jj file. //Tokens to ignore in the BNF follow. SKIP : { ' ' | '\t' | '\n' | '\r' } TOKEN : { < BUSNUMBER : "bus(["0"-"9"]) | < BUSNAME : "(["a"-"z", "A"-"Z"])* //Match a single character which can be lowercase or upper. Happens 0 or more times. < VIA : "via" > | < STOPS : "stops" > | < FREE : "free" > }

// se utilizó como indicador de comentarios temporales.

Así que he creado mis personajes para saltar. Y todas las fichas que se me ocurran.

Pero no estoy seguro de lo que me estoy perdiendo. Cualquier ayuda sería apreciada, o una explicación sería mejor ya que realmente quiero aprender a hacer esto.

Gracias.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Algunos comentarios. Para

 < BUSNUMBER : "bus(["0"-"9"]) |

Quizá quieras decir

 < BUSNUMBER : "bus(" (["0"-"9"])+ ")" > |

Sin embargo, si desea permitir espacios, debe tratar bus , ( , ) y números como tokens separados.

Para

 < BUSNAME : "(["a"-"z", "A"-"Z"])* //Match a single character which can be lowercase or upper. Happens 0 or more times.

podrías querer

 < BUSNAME : "\"" (["a"-"z", "A"-"Z", " "])* "\""> |

(No sé qué caracteres son posibles en el nombre de un bus, pero en su ejemplo tiene espacios además de letras).

Te falta -> , parar números y horarios.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda