Search in sources :

Example 16 with LexerException

use of de.be4.eventbalg.core.parser.lexer.LexerException in project probparsers by bendisposto.

the class BParser method eparse.

public Start eparse(String input, IDefinitions context) throws BCompoundException, LexerException, IOException {
    final Reader reader = new StringReader(input);
    Start ast = null;
    List<String> ids = new ArrayList<>();
    final DefinitionTypes defTypes = new DefinitionTypes();
    defTypes.addAll(context.getTypes());
    BLexer bLexer = new BLexer(new PushbackReader(reader, BLexer.PUSHBACK_BUFFER_SIZE), defTypes);
    bLexer.setParseOptions(parseOptions);
    Token t;
    do {
        t = bLexer.next();
        if (t instanceof TIdentifierLiteral) {
            if (!ids.contains(t.getText())) {
                ids.add(t.getText());
            }
        }
    } while (!(t instanceof EOF));
    Parser p = new Parser(new EBLexer(input, BigInteger.ZERO, ids, defTypes));
    boolean ok;
    try {
        ast = p.parse();
        ok = true;
    } catch (Exception e) {
        handleException(e);
        ok = false;
    }
    BigInteger b = new BigInteger("2");
    b = b.pow(ids.size());
    b = b.subtract(BigInteger.ONE);
    while (!ok && b.compareTo(BigInteger.ZERO) > 0) {
        p = new Parser(new EBLexer(input, b, ids, defTypes));
        try {
            ast = p.parse();
            ok = true;
        } catch (ParserException e) {
            b = b.subtract(BigInteger.ONE);
            handleException(e);
        }
    }
    return ast;
}
Also used : ParserException(de.be4.classicalb.core.parser.parser.ParserException) Start(de.be4.classicalb.core.parser.node.Start) ArrayList(java.util.ArrayList) Reader(java.io.Reader) StringReader(java.io.StringReader) PushbackReader(java.io.PushbackReader) Token(de.be4.classicalb.core.parser.node.Token) TIdentifierLiteral(de.be4.classicalb.core.parser.node.TIdentifierLiteral) LexerException(de.be4.classicalb.core.parser.lexer.LexerException) IOException(java.io.IOException) ParserException(de.be4.classicalb.core.parser.parser.ParserException) PushbackReader(java.io.PushbackReader) Parser(de.be4.classicalb.core.parser.parser.Parser) StringReader(java.io.StringReader) BigInteger(java.math.BigInteger) EOF(de.be4.classicalb.core.parser.node.EOF)

Aggregations

IOException (java.io.IOException)8 PushbackReader (java.io.PushbackReader)7 StringReader (java.io.StringReader)7 Start (de.be4.classicalb.core.parser.node.Start)5 BParser (de.be4.classicalb.core.parser.BParser)4 LexerException (de.be4.classicalb.core.parser.lexer.LexerException)4 Reader (java.io.Reader)4 IToken (de.hhu.stups.sablecc.patch.IToken)3 Definitions (de.be4.classicalb.core.parser.Definitions)2 BLexerException (de.be4.classicalb.core.parser.exceptions.BLexerException)2 PreParseException (de.be4.classicalb.core.parser.exceptions.PreParseException)2 TIdentifierLiteral (de.be4.classicalb.core.parser.node.TIdentifierLiteral)2 Token (de.be4.classicalb.core.parser.node.Token)2 ParserException (de.be4.classicalb.core.parser.parser.ParserException)2 Token (de.be4.classicalb.core.preparser.node.Token)2 LexerException (de.be4.eventb.core.parser.lexer.LexerException)2 LexerException (de.be4.eventbalg.core.parser.lexer.LexerException)2 LtlLexer (de.be4.ltl.core.parser.internal.LtlLexer)2 UniversalToken (de.be4.ltl.core.parser.internal.UniversalToken)2 Lexer (de.be4.ltl.core.parser.lexer.Lexer)2