2011-09-19 53 views
-3

我正在使用最新的ANTLR。我收到此错误信息,同时试图调试此语法: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; 
} 

我假设它的文法的错误,导致一个又一个被编译和工作的罚款。你能指出我可能的错误吗?

回答

-4

我看到这里没有人知道关于ANTLR的任何信息。幸运的是我已经明白了我自己的想法。问题的原因是语法中的逻辑 - 我不知道到底是什么,它可能是错误的导入,以错误的方式使用变量,参数或返回值,或者最终丢失词法分析器的包声明:

@lexer::header{ 
    package parser; 
} 
+0

绝对废话!我已经告诉过你这个问题可能出现在你的自定义代码中:你只是不想听(并不是特别感激,并且试图催促我回答你!)。缺少“@lexer :: header”绝对不是问题所在:让读者明白本问答。 –

+0

如何解释这样一个事实,即在不改变我的自定义代码中的任何行的情况下,仅在语法逻辑中更改后才开始工作? – rideronthestorm

+0

我认为你只是因为你是一个恶毒的孩子而做出来的。事实上,你以“我看到这里没有人对ANTLR知道任何事情”开始你的“答案”。“_足够告诉我。寮步再见。 –