Pergunta

Posso escrever uma regra onde o token inicial é parcialmente fixo e parcialmente genérico?

rule: ID '=' NUMBER
      ;

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

NUMBER: (0 .. 9) +

Mas apenas se o ID token é na forma var * (var é fixo)

Graças

Foi útil?

Solução

Você quer dizer isso?

// 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 qualquer maneira : quando possível, faça não usar um rigoroso gramática lexer para as suas mensagens de erro. Eles são mais lento e completamente ilegível para usuários . Você deve analisar ID de uma forma relaxada, em seguida, verifique mais tarde se é precisamente a forma correta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top