Advertisement
Guest User

Untitled

a guest
Apr 26th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. /******************************************************************************************************************\
  2. * Uma empresa pretende implementar um repositório de informação sobre artigos científicos. Para tal, desenvolveu *
  3. * um processo automático que permite receber das editoras, a informação em ficheiros de texto cujas linhas têm a *
  4. * seguinte estrutura em formato EBNF (em que os campos opcionais são apresentados entre [] e os que se repetem *
  5. * 0 ou mais vezes entre { }): *
  6. * <título> [<ISBN>] <ano_publicação> [<género>] <autor>{,<autor>} {<quantidade>} *
  7. \*******************************************************************************************************************/
  8.  
  9. grammar j;
  10.  
  11. // Monoline comment about a parser rule
  12. myStartingRule : input+ ;
  13.  
  14. /*
  15. A multi-line Java-like comment
  16. */
  17. input: b NEWLINE
  18. | input NEWLINE
  19. ;
  20.  
  21. b: titulo isbn ano_pub gen autor autores qtd
  22. ;
  23.  
  24. titulo: STRING ' '
  25. ;
  26.  
  27. isbn:
  28. | ISBN ' '
  29. ;
  30.  
  31. ano_pub: BTWIN_1800_2018 ' '
  32. ;
  33.  
  34. gen:
  35. | GENERO ' '
  36. ;
  37.  
  38. autor: STRING ' '
  39. ;
  40.  
  41. autores:
  42. | ',' autor autores
  43. ;
  44. /*
  45. qtds:
  46. | qtd ' 'qtds
  47. ;
  48. */
  49.  
  50. qtd: BTWIN_1800_2018
  51. | B4_1800
  52. | AFT_2018
  53. ;
  54.  
  55. // some lexer rules
  56.  
  57. STRING : ('"'([a-zA-Z])|(' '|[0-9])+'"') ; // String de caracteres alfanuméricos limitada por aspas + espaços
  58. ISBN : ( [0-9]'-'[0-9][0-9][0-9][0-9]'-'[0-9][0-9][0-9][0-9]'-'([0-9]|'X') | [0-9][0-9][0-9]'-'[0-9]'-'[0-9][0-9][0-9][0-9]'-'[0-9][0-9][0-9][0-9]'-'([0-9]|'X') ) ; // N-NNNN-NNNN-R ou NNN-N-NNNN-NNNN-R em que N representa um algarismo e, R um algarismo ou a letra X;
  59. B4_1800 : ( [0-9][0-9][0-9])|('1'[0-7][0-9][0-9]) ; // todos os inteiros em ]-infinito, 1800[
  60. BTWIN_1800_2018 : ('1'[8-9][0-9][0-9][0-9]) | ('200'[0-9]) | ('201'[0-8]) ; // todos os inteiros em [1800,2018]
  61. AFT_2018 : ('2019') | ('20'[2-9][0-9][0-9]) | ([2-9][1-9][0-9][0-9]+) ; // todos os inteiros em ]2018, +infinito[
  62. GENERO : 'SURVEY' | 'ENSAIO' | 'INOVAÇÃO' ;
  63. NEWLINE : '\n' ; // return newlines to parser
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement