我正在使用Antlr v3和java进行项目,并且在AntlrWorks中一切顺利,但是当我切换到eclipse的插件Antlr IDE时,解释器无法匹配我写的句子,告诉我不匹配.在我看来,它无法识别我在lexer中指定的要跳过的单词列表.然而,它在AntlrWorks中完美运行是一样的.
有什么建议?
我在eclipse中设置了antlr buider:Antlr Parser Generator v3.4
我在Eclipse Indigo上使用了antlr-3.4-complete-no-antlrv2.jar版本的ANTLR.
我已经安装了ANTLR IDE插件以及ZEST和GEF.当我生成组合语法文件并添加标题,词法分析器标头和规则时,Eclipse不会生成Parser和Lexer文件.
如果我使用antlr-3.2.jar就可以了.我可以使用java -classpath antlr-3.4-complete-no-antlrv2.jar org.antlr.Tool Sample.g在Eclipse之外生成Lexer和Parser文件(使用antlr-3.4.*).
有没有办法在Eclipse版本3.4中启用它?
我想为一种简单的语言定义语法.
该语言允许某种分配.
例
keyworda: this is the 1 keyword-A
keywordb: this is the second keywordb
...
Run Code Online (Sandbox Code Playgroud)
问题是,在关键字和':'任何char之后应该是可能的(关键字也是)
我尝试过很多东西,但我认为我仍然没有进入词法分析器和解析器思考...
我最后的想法失败了:
rule
: 'keyworda' ':' anychar* 'keywordb' ':' anychar* EOF
;
anychar
: .
;
NEWLINE
: ('\r'? '\n') {$channel=HIDDEN;}
;
Run Code Online (Sandbox Code Playgroud)
首先:谢谢你的回答!
我通读了手册并查看了scott stanchfield的教程.
问题是,我没有得到"anychar"的东西!
你是对的,我上面提到的语法错了,因为我很着急.
这是一个更好的尝试.问题仍然是,Tokenizer在定义ala中识别例如keyworda
keyworda : this is keyworda.
keywordb : this is another key!
...
Run Code Online (Sandbox Code Playgroud)
语法:
rule
: KEYA ':' STRING_LITERAL* NEWLINE
keybdefinition*
EOF
;
keybdefinition
: KEYB ':' STRING_LITERAL* NEWLINE
;
KEYA: 'keyworda';
KEYB:'keywordb'; …Run Code Online (Sandbox Code Playgroud) 这是我第一次与ANTLR合作在伦敦帝国理工学院开展项目,直到现在它才非常有用.我已经定义了一个简单的递归语法如下
grammar Hello;
execution: workflow;
workflow : Task
| workflow OPERATOR workflow
|'(' workflow OPERATOR workflow ')'
|'(' workflow OPERATOR workflow ')' (OPERATOR workflow)*
;
Task : 'T' ('0'..'9')+ | 'WF' ('0'..'9')+;
OPERATOR: 'AND' | 'OR' | 'XOR' |';' ;
WS : [ \t\n\r]+ -> channel(HIDDEN) ;
Run Code Online (Sandbox Code Playgroud)
评估字符串,如:
T6 ; (T4 AND T7) ; T5 ; ( (WF23 OR WF2) OR (T3 AND WF4) AND T4) AND T5 OR T11
Run Code Online (Sandbox Code Playgroud)
并且它完美地运行,当我尝试评估不正确的字符串时,我的问题就出现了
T6 ; (T4 AND T7) ; T5 ; ( …Run Code Online (Sandbox Code Playgroud)