Antlr 超时等待连接到远程解析器

Posted

技术标签:

【中文标题】Antlr 超时等待连接到远程解析器【英文标题】:Antlr Time-out waiting to connect to the remote parser 【发布时间】:2011-11-20 14:20:37 【问题描述】:

我正在使用最新的 ANTLR。我在尝试调试此语法时收到此错误消息:

grammar Grammar;

options    language = Java;


@header 
package parser;
import java.util.HashMap;
import viewmodel.*;
import java.util.List;


@members 
/** Map variable name to Integer object holding value */
HashMap memory = new HashMap();


prog returns [DiagramNode node]
    :   clas 
        $node = $clas.node;
    ;

clas returns [DiagramNode node]
    :VISIBILITY* CLASSORINTERFACE name=NAME '' classDef '' NEWLINE
        $node = $classDef.node;
        $node.setName(name.getText());
        
    ;

classDef returns [DiagramNode node]
    :$node = new DiagramNode();    
    fieldDef ';' NEWLINE?
        $node.getFields().add($fieldDef.field);
    ;

fieldDef returns [DiagramField field]
    :$field = new DiagramField();
    type=NAME name=NAME ';' NEWLINE? 
        $field.setType(type.getText());
        $field.setName(name.getText());
        
    ;


VISIBILITY 
    :   ('public' | 'private' | 'protected');
CLASSORINTERFACE
    :   ('class' | 'inerface');
NAME
    :   ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9') *;
INT :   '0'..'9'+ ;
NEWLINE:'\r'? '\n' skip();;
WS  :   (' '|'\t')+ skip(); ;

输入是:

class Abc 
    Type1 Name1;
    Type2 Name2;

我假设这是语法的错误,因为另一个正在编译并且工作正常。你能指出可能的错误吗?

【问题讨论】:

【参考方案1】:

我看到这里没有人知道 ANTLR。幸运的是我自己想通了。问题的原因是语法内部的逻辑 - 我不知道到底是什么,可能是错误的导入,使用变量、参数或以错误的方式返回,或者最终缺少 lexer 的包声明:

@lexer::header
    package parser;

【讨论】:

一派胡言!我已经告诉过您问题可能出在您的自定义代码中:您只是不想听(并且不是特别感激并且试图催促我回答您!)。没有@lexer::header 绝对不是问题:让阅读此问答的任何人都清楚这一点。 您如何解释这样一个事实,即无需更改我的自定义代码中的任何行,它仅在语法逻辑更改后才开始工作? 我认为你只是在编造它,因为你是一个恶毒的孩子。您以 “我看到这里没有人对 ANTLR 有任何了解。” 开始您的“答案”这一事实告诉了我足够多的信息。再见。 该声明基于这样一个事实,即几天后该主题没有答案。希望我让它自己工作。当然,您可以考虑到已经有某种答案的事实,但是您猜怎么着?你删除了它,因为我对它不够感激。是啊,我是个孩子,但你的行为很成熟。亲爱的 Bart Kiers,我没有义务感谢我从你那里得到的任何无用的回答。如果它解决了我的问题,我会将其标记为已接受的答案。更何况你开始无缘无故地冒犯我(就像一个“讨厌的孩子”)。 正确,您没有感谢任何人在您的问题上花费的时间。但你知道吗,这样做只是普通的礼貌。请注意,我没有删除我的答案,因为您没有花时间表示感谢或接受答案:我真的不在乎。事实上你没有注意我的建议你试图催我回答你的事实(你已经删掉了,但在历史记录中仍然可见)是我删除的原因我的答案。仅作记录:这个公认的答案不是任何超时问题的解决方案。任何阅读此书的人,... TBC

以上是关于Antlr 超时等待连接到远程解析器的主要内容,如果未能解决你的问题,请参考以下文章

ANTLR4 如何编写语法文件之语法解析器规则

ANTLR4 如何编写语法文件之语法解析器规则

ANTLR 4解析器匹配任何令牌

如何让 C 语言中的 ANTLR3.5 生成的解析器在 MVS EBCDIC 环境中工作?

关于 SQL 解析,为何编程语言解析器 ANTLR 更胜一筹?

关于 SQL 解析,为何编程语言解析器 ANTLR 更胜一筹?