3

antlr3 中 Javascript 目标的当前状态是什么?我试图为一个简单的语法生成一个解析器,但是生成的代码包含很多编译器错误。检查网站后,我检查了当前的 antlr3.5-snapshot 代码并使用 maven 从源代码构建了 antlr。结果还是一样?有没有我可以使用的特殊版本?还是目标被破坏了?(我发现关于目标在 3.1、3.2 中被破坏的评论,在 3.3 中工作,而对 3.4 和 3.5 没有任何评论) Hier 是 Javascript 代码不起作用的示例:

// public class variables
var = ,
    = ,
    = ,
...
    = ,
    = ;

在生成的词法分析器和解析器文件中有更多此类代码。

非常感谢任何提示。

这是我用来尝试 javascript 代码生成的非常简单的测试语法。几乎所有东西都是由 antlrworks 生成的。我添加了目标语言和 prog 规则。(请不要花太多时间编辑此语法以使其正常工作。Antlrworks 检查了语法并且 Java 代码生成工作。所以 - 从用户的角度来看 - Javascript 代码生成应该在不更改语法的情况下工作。)再次感谢您的帮助。

grammar TestgrammarV001;

options {
language=JavaScript;
}


prog    :    ID | INT;

ID  :   ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
    ;

INT :   '0'..'9'+
    ;

FLOAT
    :   ('0'..'9')+ '.' ('0'..'9')* EXPONENT?
    |   '.' ('0'..'9')+ EXPONENT?
    |   ('0'..'9')+ EXPONENT
    ;

COMMENT
    :   '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
    |   '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
    ;

WS  :   ( ' '
        | '\t'
        | '\r'
        | '\n'
        ) {$channel=HIDDEN;}
    ;

STRING
    :  '"' ( ESC_SEQ | ~('\\'|'"') )* '"'
    ;

CHAR:  '\'' ( ESC_SEQ | ~('\''|'\\') ) '\''
    ;

fragment
EXPONENT : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;

fragment
HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;

fragment
ESC_SEQ
    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
    |   UNICODE_ESC
    |   OCTAL_ESC
    ;

fragment
OCTAL_ESC
    :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
    |   '\\' ('0'..'7') ('0'..'7')
    |   '\\' ('0'..'7')
    ;

fragment
UNICODE_ESC
    :   '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
    ;
4

1 回答 1

0

大约一年半前,我发布了一个类似的问题(这是帖子:antlr 3.4 或 3.5 中的 Javascript 状态)。

JavaScript 目标适用于 ANTLR v3.3,但不适用于 3.4 或 3.5。

于 2015-04-23T18:56:18.937 回答