📄 test.g
字号:
/* C++ interface test of Parser Exception Handling
*
* Given input:
*
* if a+ then a=b+b;
*
* the program should respond with
*
* invalid conditional in 'if' statement
* found assignment to a
*/
<<
#include <stream.h>
#include "DLGLexer.h"
#include "PBlackBox.h"
typedef ANTLRCommonToken ANTLRToken;
int main()
{
ParserBlackBox<DLGLexer, PEHTest, ANTLRToken> p(stdin);
int retsignal;
p.parser()->rule(&retsignal);
return 0;
}
>>
/*
Uncommenting this will make ANTLR think you put these handlers at the
end of each rule:
exception
catch MismatchedToken : <<printf("dflt:MismatchedToken\n");>>
default : <<printf("dflt:dflt\n");>>
*/
#token "[\ \t]+" <<skip();>>
#token "\n" <<skip(); newline();>>
#token THEN "then"
#tokclass DIE { "@" "if" ID "else" }
class PEHTest {
rule: ( stat )+
;
stat: "if" t:expr THEN stat { "else" stat }
| id:ID "=" expr ";"
<<printf("found assignment to %s\n", $id->getText());>>
;
exception[t]
default :
<<
printf("invalid conditional in 'if' statement\n");
consumeUntilToken(THEN);
suppressSignal;
>>
exception
catch MismatchedToken :
catch NoViableAlt :
catch NoSemViableAlt :
<<
printf("stat:caught predefined signal\n");
consumeUntil(DIE_set);
suppressSignal;
>>
expr: expr1 ("\+" expr1)*
;
expr1
: expr2 ("\*" expr2)*
;
expr2: ID
;
}
#token ID "[a-z]+"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -