这应该非常简单,但要么我没有正确阅读文档,要么 Kramdown 不支持这一点。我正在尝试将命令行输出放入博客文章中,我想为此使用块引用。然而,kramdown 坚持将所有内容放在同一行的同一个块引用中。
我可以在块引用的每一行之间放置一个空格,但这并不是输出的真实表示。如何创建块引用,但每一行实际上都在单独的行上,每行之间没有空格。我想我正在寻找更多“预格式化”输出,但我没有看到 kramdown 支持这一点。
我需要解析一个小的表达式语言(并且,或者,不是,parens改变优先级)所以选择了ANTLR来完成任务,我取得了很好的进展(ANTLRWorks非常适合新手).我在antlr网站上使用了一些Getting Starting引用,然后找到两篇完全适合我想要完成的内容的博客文章:
http://www.codeproject.com/KB/recipes/sota_expression_evaluator.aspx http://www.alittlemadness.com/2006/06/05/antlr-by-example-part-1-the-language
我遇到的问题是无论我输入什么输入我总是得到错误:
第1:29行输入'EOF'没有可行的选择
因此,作为我的故障排除的一部分,我决定尝试一种我知道很好的语法,并从第一个链接中找到的ECalc.g语法生成一个词法分析器/解析器.令我惊讶的是,在使用该语法时我遇到了同样的错误!我很生气.我对语法的唯一改变是让它生成Java代码并在@members部分中取出一些CSharp代码.
这是我的测试类:
public class ECalcTester {
private final static Logger logger = Logger.getLogger(ECalcTester.class);
public static void main(String[] args) {
BasicConfigurator.configure();
ECalcLexer lex = new ECalcLexer(new ANTLRStringStream("false || not (false and true)"));
Token token;
while (true) {
token = lex.nextToken();
if (token.getType() == Token.EOF) {
break;
}
System.out.println("Token: ‘" + token.getText() + "’");
}
CommonTokenStream tokens = new CommonTokenStream(lex);
lex.nextToken();
ECalcParser parser = new ECalcParser(tokens);
try {
logger.debug(parser.expression().getTree());
} catch (org.antlr.runtime.RecognitionException e) {
logger.error("Exception ", …Run Code Online (Sandbox Code Playgroud)