Domanda

Posso scrivere una regola in cui il token iniziale è in parte fissa e in parte generica?

rule: ID '=' NUMBER
      ;

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

NUMBER: (0 .. 9) +

Ma solo se l'ID token è nella forma var * (var è fisso)

Grazie

È stato utile?

Soluzione

Vuoi dire questo?

// 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')+
    ;

In entrambi i casi : quando possibile, fare non utilizzare una rigorosa grammatica lexer per i vostri messaggi di errore. Essi sono più lento e completamente illeggibile per gli utenti . Si dovrebbe analizzare ID in una forma rilassata, quindi verificare in seguito se è esattamente nella forma corretta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top