Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /******************************************************************************************************************\
- * Uma empresa pretende implementar um repositório de informação sobre artigos científicos. Para tal, desenvolveu *
- * um processo automático que permite receber das editoras, a informação em ficheiros de texto cujas linhas têm a *
- * seguinte estrutura em formato EBNF (em que os campos opcionais são apresentados entre [] e os que se repetem *
- * 0 ou mais vezes entre { }): *
- * <título> [<ISBN>] <ano_publicação> [<género>] <autor>{,<autor>} {<quantidade>} *
- \*******************************************************************************************************************/
- grammar j;
- // Monoline comment about a parser rule
- myStartingRule : input+ ;
- /*
- A multi-line Java-like comment
- */
- input: b NEWLINE
- | input NEWLINE
- ;
- b: titulo isbn ano_pub gen autor autores qtd
- ;
- titulo: STRING ' '
- ;
- isbn:
- | ISBN ' '
- ;
- ano_pub: BTWIN_1800_2018 ' '
- ;
- gen:
- | GENERO ' '
- ;
- autor: STRING ' '
- ;
- autores:
- | ',' autor autores
- ;
- /*
- qtds:
- | qtd ' 'qtds
- ;
- */
- qtd: BTWIN_1800_2018
- | B4_1800
- | AFT_2018
- ;
- // some lexer rules
- STRING : ('"'([a-zA-Z])|(' '|[0-9])+'"') ; // String de caracteres alfanuméricos limitada por aspas + espaços
- 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;
- B4_1800 : ( [0-9][0-9][0-9])|('1'[0-7][0-9][0-9]) ; // todos os inteiros em ]-infinito, 1800[
- BTWIN_1800_2018 : ('1'[8-9][0-9][0-9][0-9]) | ('200'[0-9]) | ('201'[0-8]) ; // todos os inteiros em [1800,2018]
- AFT_2018 : ('2019') | ('20'[2-9][0-9][0-9]) | ([2-9][1-9][0-9][0-9]+) ; // todos os inteiros em ]2018, +infinito[
- GENERO : 'SURVEY' | 'ENSAIO' | 'INOVAÇÃO' ;
- NEWLINE : '\n' ; // return newlines to parser
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement