Preword
During my development of Java prolog engine (JProl) I had developed parser to parse sources written in Edinburgh style, I decided to extract the module into separated project and 1.0.0 version was published. In 2018 I had decided to make deep refactoring and 2.0.0 version was published. The Parser allows build custom prolog parsers with support of operators and some modern prolog features.
Features
It supports
- prolog operators
 - line and block commentaries
 - underline splitted numbers
 - curly blocks
 
Maven dependency
It is a library without 3th side dependencies, it is published im the Maven central and can be added into project just with:
<dependency>
    <groupId>com.igormaznitsa</groupId>
    <artifactId>java-prolog-parser</artifactId>
    <version>2.0.2</version>
</dependency>
 
How to use?
Parser implements stream which sequentially reads prolog terms from reader. By default PrologParser is abstract class but there is GenericPrologParser class provides minimalistic implementation.
Reader reader = new StringReader("hello(world). some({1,2,3}). power(X,Y,Z) :- Z is X ** Y.");
PrologParser parser = new GenericPrologParser(reader, new DefaultParserContext(ParserContext.FLAG_CURLY_BRACKETS, Op.SWI));
parser.forEach(System.out::println);
 
Supported Prolog terms
The parser supports
- atoms (class PrologAtom)
 - numbers (classes PrologInt and PrologFloat), they are based on big numbers so that their size is not restricted
 - lists (class PrologList)
 - structures (class PrologStruct)
 - variables (class PrologVar)
 
Supported quotations:
- single quote 
' - special flag turns on whitespace support in single quote mode
 - double quote 
" - back tick
 
Bracketed empty-functor structures represented by structure with functor either {} or () (depends on bracket type).