Gramática
Não é a gramática do compilador: as ações semânticas e o pacote Java ontodlp foram omitidos. Várias regras existem apenas como exemplos na tese e foram aqui escritas para que a linguagem possa ser documentada e, mais tarde, editada num IDE.
- palavra reservada
- nome de regra
- => pontuação
- ? opcional * repetição
Estrutura
Conceitos e atributos
atributosSecao
atributoDeclList
atributoDecl
conceitos
conceitoList
conceito
atributos
atributoRef
tipo
enumValue
Indivíduos
Relações
Triplos
Restrições
Palavras-chave
atributosKw
atributos
attributes
conceitosKw
conceitos
concepts
relacoesKw
relacoes
relations
restricoesKw
restricoes
restrictions
inverseKw
inverseOf
inversaDe
iofKw
iof
instancia
pofKw
pof
parte
isaKw
is-a
subclasse
synKw
synonym
sinonimo
Léxico
atom
comentário
De // até ao fim da linha, ou entre /* e */. É ignorado.
TEXT
Um nome. Começa por uma letra e segue-se de letras, dígitos, traços inferiores ou hífenes. Aceita letras acentuadas.
STRING
Texto entre aspas simples ou duplas.
NUMBER
Um ou mais dígitos.
Listagem completa
Não é a gramática do compilador: as ações semânticas e o pacote Java ontodlp foram omitidos. Várias regras existem apenas como exemplos na tese e foram aqui escritas para que a linguagem possa ser documentada e, mais tarde, editada num IDE.
// OntoDL+ syntactic grammar
//
// Reconstructs the language described in:
// Alexandre Costa Dias, "ONTODL+: an ontology description language and its
// compiler", Master's thesis, University of Minho, 2021.
// https://hdl.handle.net/1822/81340
//
// Licensed under CC BY-NC 4.0. See NOTICE.md for attribution.
// This file has no semantic actions and is not the original compiler grammar.
// See grammar/NOTES.md for sources, keyword choices, and gaps.
grammar OntoDLPlus;
ontologia
: 'Ontologia' TEXT atributosSecao? conceitos individuos? relacoes triplos restricoes? '.'
;
atributosSecao
: atributosKw '{' (expandStmt | atributoDeclList) '}'
;
atributoDeclList
: atributoDecl (',' atributoDecl)*
;
atributoDecl
: TEXT ':' tipo
;
conceitos
: conceitosKw '{' (expandStmt | conceitoList) '}'
;
conceitoList
: conceito (',' conceito)*
;
conceito
: TEXT atributos?
;
atributos
: '[' atributoRef (',' atributoRef)* ']'
;
atributoRef
: TEXT (':' tipo)?
;
tipo
: TEXT
| 'enum' '(' enumValue (',' enumValue)* ')'
;
enumValue
: atom
;
individuos
: 'individuos' '{' (expandStmt | individuoList) '}'
;
individuoList
: TEXT TEXT? (',' TEXT TEXT?)*
;
relacoes
: relacoesKw '{' (expandStmt | relacaoList) '}'
;
relacaoList
: relacao (',' relacao)*
;
relacao
: TEXT ('[' relInf (',' relInf)* ']')?
;
relInf
: 'domain' ':' TEXT
| 'codomain' ':' TEXT
| 'props' ':' properties
;
properties
: '(' property (',' property)* ')'
| property
;
property
: 'bijection'
| 'injection'
| 'surjection'
| 'abstraction'
| 'function'
| 'representation'
| 'surjective'
| 'simple'
| 'entire'
| 'injective'
| inverseKw '=' TEXT
;
triplos
: 'triplos' '{' (expandStmt | triploList) '}'
;
triploList
: triplo (';' triplo)*
;
triplo
: '('? TEXT '=' iofKw '=>' TEXT atribInsts? ')'?
| '('? TEXT '=' pofKw '=>' TEXT ')'?
| '('? TEXT '=' isaKw '=>' TEXT ')'?
| '('? TEXT '=' synKw '=>' TEXT ')'?
| '('? TEXT '=' TEXT '=>' TEXT ')'?
| TEXT '=[' relacionamentos (';' relacionamentos)* ']'
;
relacionamentos
: TEXT '=>' TEXT (',' relMultiplo)*
| synKw '=>' TEXT (',' relMultiplo)*
| isaKw '=>' TEXT (',' relMultiplo)*
| pofKw '=>' TEXT (',' relMultiplo)*
| iofKw '=>' TEXT atribInsts? (',' relMultiplo)*
;
relMultiplo
: ('=>')? TEXT
;
atribInsts
: '[' atribInst (',' atribInst)* ']'
;
atribInst
: TEXT '=' atom
;
restricoes
: restricoesKw '{' constraint* '}'
;
constraint
: constraintAtom ':-' constraintBody '.'
;
constraintBody
: constraintDisj
;
constraintDisj
: constraintConj (';' constraintConj)*
;
constraintConj
: constraintPrim (',' constraintPrim)*
;
constraintPrim
: '(' constraintBody ')'
| 'not' '(' constraintBody ')'
| constraintAtom
;
constraintAtom
: TEXT '=' TEXT '=>' TEXT
| TEXT '==' atom
| TEXT NEQ atom
;
expandStmt
: 'expand' fileName ';'
;
fileName
: TEXT ('.' TEXT)+
;
atom
: TEXT
| STRING
| NUMBER
;
atributosKw : 'atributos' | 'attributes' ;
conceitosKw : 'conceitos' | 'concepts' ;
relacoesKw : 'relacoes' | 'relations' ;
restricoesKw : 'restricoes' | 'restrictions' ;
inverseKw : 'inverseOf' | 'inversaDe' ;
iofKw : 'iof' | 'instancia' ;
pofKw : 'pof' | 'parte' ;
isaKw : 'is-a' | 'subclasse' ;
synKw : 'synonym' | 'sinonimo' ;
NEQ : '\\=' ;
NUMBER
: [0-9]+
;
STRING
: '"' (~["\r\n])* '"'
| '\'' (~['\r\n])* '\''
;
TEXT
: [a-zA-Z_\u00C0-\u024F] [a-zA-Z0-9_\-\u00C0-\u024F]*
;
LINE_COMMENT
: '//' ~[\r\n]* -> skip
;
BLOCK_COMMENT
: '/*' .*? '*/' -> skip
;
WS
: [ \t\r\n]+ -> skip
;