/**
* Parses the expression using antlr, aborts the parsing on the first error.
*
* @param expression
* an expression, not {@code null}
* @return a {@link ParseTree} for further processing
* @throws ExpressionException
*/
ParseTree parseExpression(String expression) throws ExpressionException {
if (expression == null) {
throw new IllegalArgumentException("expression must not be null");
}
ANTLRInputStream in = new ANTLRInputStream(expression);
FunctionExpressionLexer lexer = new CapitulatingFunctionExpressionLexer(in);
CommonTokenStream tokens = new CommonTokenStream(lexer);
FunctionExpressionParser parser = new FunctionExpressionParser(tokens);
parser.removeErrorListeners();
lexer.removeErrorListeners();
ExpressionErrorListener listener = new ExpressionErrorListener();
parser.addErrorListener(listener);
lexer.addErrorListener(listener);
parser.setErrorHandler(new CapitulatingErrorStrategy());
try {
ParseTree tree = parser.operationExp();
if (listener.containsError()) {
throw new ExpressionException(listener.getErrorMessage(), listener.getErrorLine());
} else {
return tree;
}
} catch (CapitulatingRuntimeException e) {
if (listener.containsError()) {
throw new ExpressionException(listener.getErrorMessage(), listener.getErrorLine());
} else {
// cannot happen since the parser and lexer always register the error before trying
// to recover
throw new ExpressionException("Unknown error");
}
}
}
java类org.antlr.v4.runtime.CommonTokenStream的实例源码
AntlrParser.java 文件源码
项目:rapidminer
阅读 26
收藏 0
点赞 0
评论 0
BooleanExpANTLRHandler.java 文件源码
项目:BEAST
阅读 16
收藏 0
点赞 0
评论 0
/**
* Constructor
* @param styledDocument the StyledDocument instance to analyse
*/
public BooleanExpANTLRHandler(StyledDocument styledDocument) {
try {
this.styledDocument = styledDocument;
lexer = new FormalPropertyDescriptionLexer(new ANTLRInputStream(
styledDocument.getText(0, styledDocument.getLength())));
CommonTokenStream ts = new CommonTokenStream(lexer);
parser = new FormalPropertyDescriptionParser(ts);
} catch (BadLocationException ex) {
Logger.getLogger(BooleanExpANTLRHandler.class.getName()).log(Level.SEVERE, null, ex);
}
}
BooleanExpANTLRHandler.java 文件源码
项目:BEAST
阅读 16
收藏 0
点赞 0
评论 0
/**
* Method that parses the current input of a BooleanExpCodeArea and returns a
* FormalPropertyDescriptionParser.BooleanExpListContext object which can then be used for building an AST
* out of the input.
* @return a BooleanExpListContext node from the ANTLR generated ParseTree.
*/
public FormalPropertyDescriptionParser.BooleanExpListContext getParseTree() {
String text = null;
try {
text = styledDocument.getText(0, styledDocument.getLength());
} catch (BadLocationException e) {
e.printStackTrace();
}
lexer.setInputStream(new ANTLRInputStream(text));
CommonTokenStream ts = new CommonTokenStream(lexer);
parser.setTokenStream(ts);
return parser.booleanExpList();
}
CAntlrHandler.java 文件源码
项目:BEAST
阅读 22
收藏 0
点赞 0
评论 0
/**
* constructor
* @param pane the pane to hold the handler
*/
public CAntlrHandler(JTextPane pane) {
this.pane = pane;
lexer = new CLexer(new ANTLRInputStream(pane.getText()));
CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
cParser = new CParser(commonTokenStream);
}
CAntlrHandler.java 文件源码
项目:BEAST
阅读 21
收藏 0
点赞 0
评论 0
/**
* gives the parse tree
* @return the parse tree
*/
public ParseTree getCParseTree() {
try {
String code = pane.getStyledDocument().getText(0, pane.getStyledDocument().getLength());
lexer.setInputStream(new ANTLRInputStream(code));
CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
cParser.setTokenStream(commonTokenStream);
return cParser.compilationUnit();
} catch (BadLocationException ex) {
Logger.getLogger(CAntlrHandler.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
CAntlrHandler.java 文件源码
项目:BEAST
阅读 22
收藏 0
点赞 0
评论 0
/**
* updates the parser
*/
public void updateParser() {
try {
String code = pane.getStyledDocument().getText(0, pane.getStyledDocument().getLength());
lexer.setInputStream(new ANTLRInputStream(code));
CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
cParser.setTokenStream(commonTokenStream);
} catch (BadLocationException ex) {
Logger.getLogger(CAntlrHandler.class.getName()).log(Level.SEVERE, null, ex);
}
}
FormalPropertySyntaxTreeToAstTranslaterTest.java 文件源码
项目:BEAST
阅读 15
收藏 0
点赞 0
评论 0
@Test
public void testCreateAST() {
String exp = "FOR_ALL_VOTERS(v) : EXISTS_ONE_CANDIDATE(c) : VOTES1(v) == c && VOTES1(v) == c;";
FormalPropertyDescriptionLexer lexer = new FormalPropertyDescriptionLexer(new ANTLRInputStream(exp));
CommonTokenStream tokenS = new CommonTokenStream(lexer);
FormalPropertyDescriptionParser parser = new FormalPropertyDescriptionParser(tokenS);
FormalPropertySyntaxTreeToAstTranslator translater = new FormalPropertySyntaxTreeToAstTranslator();
}
ANTLRTest.java 文件源码
项目:BEAST
阅读 16
收藏 0
点赞 0
评论 0
static void showGuiTreeView(final String code) {
final org.antlr.v4.runtime.CharStream stream = new ANTLRInputStream(code);
final FormalPropertyDescriptionLexer lexer = new FormalPropertyDescriptionLexer(stream);
final CommonTokenStream tokens = new CommonTokenStream(lexer);
final FormalPropertyDescriptionParser parser = new FormalPropertyDescriptionParser(tokens);
final ParseTree tree = parser.booleanExpList();
final List<String> ruleNames = Arrays.asList(FormalPropertyDescriptionParser.ruleNames);
final TreeViewer view = new TreeViewer(ruleNames, tree);
view.open();
}
ANTLRTest.java 文件源码
项目:BEAST
阅读 16
收藏 0
点赞 0
评论 0
static void showGuiTreeView(final String code) {
final org.antlr.v4.runtime.CharStream stream = new ANTLRInputStream(code);
final CLexer lexer = new CLexer(stream);
final CommonTokenStream tokens = new CommonTokenStream(lexer);
final CParser parser = new CParser(tokens);
final ParseTree tree = parser.declaration();
final List<String> ruleNames = Arrays.asList(CParser.ruleNames);
final TreeViewer view = new TreeViewer(ruleNames, tree);
view.open();
}
Parser.java 文件源码
项目:travny
阅读 19
收藏 0
点赞 0
评论 0
private static TravnyParser.SchemaFileContext parseContext(String dsl) {
CharStream cs = new ANTLRInputStream(dsl);
TravnyLexer lexer = new TravnyLexer(cs);
lexer.removeErrorListeners();
lexer.addErrorListener(new BreakingErrorListener());
CommonTokenStream tokens = new CommonTokenStream(lexer);
TravnyParser parser = new TravnyParser(tokens);
parser.removeErrorListeners();
parser.addErrorListener(new BreakingErrorListener());
TravnyParser.SchemaFileContext parsed = parser.schemaFile();
return parsed;
}