Pregunta

¿Puedo escribir una regla en la que el token inicial sea en parte fijo y en parte genérico?

rule: ID '=' NUMBER
      ;

ID: (A.. Z | a.. Z) +

NUMBER: (0 .. 9) +

Pero solo si el ID del token tiene el formato var* (var es fijo)

Gracias

¿Fue útil?

Solución

¿Quieres decir esto?

// Use this instead of ID in all parser rules that take either token
identifier
    :   VAR_ID | ID
    ;

VAR_ID
    :   'var' ('A'..'Z' | 'a'..'z')*
    ;

ID
    :   ('A'..'Z' | 'a'..'z')+
    ;

De cualquier manera:cuando sea posible, hazlo NO Utilice una gramática lexer estricta para sus mensajes de error.Ellos son Más lento y completamente ilegible para los usuarios.Deberías analizar ID en forma relajada y luego verifique más adelante si está exactamente en la forma correcta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top