📄 rewrite.g
字号:
options { language="Cpp";}{#include <iostream>}class Rewrite extends Lexer;//protectedSTARToptions { ignore=WS_;} : id:ID ":="! '('! expr:EXPR ')'! { // can access text matched for any rule std::cout << "found " << id->getText() << "," << expr->getText() << std::endl; // text will be ID+EXPR minus whitespace } ;protectedID : ( let:LETTER {std::cout << "letter " << let->getText() << std::endl;} )+ ;protectedLETTER : 'a'..'z' { std::string s = $getText; // get access text of this rule// $setText(s.toUpperCase()); // can reset it too $setText(s); // can reset it too } ;protectedEXPR: i:INT! // don't include, but i->getText() has access {$setText(i->getText());} // effect is if no "!" and no "i:" | ID ;protectedINT : ('0'..'9')+ ;// what if ! on rule itself and invoker had !...should// rule return anything in the token to the invoker? NO!// make sure 'if' is in the right spot// What about no ! on caller but ! on called rule?protectedWS_! : ( ' ' // whitespace not saved | '\t' | '\n' {newline();} )+ {$setType(ANTLR_USE_NAMESPACE(antlr)Token::SKIP);} // way to set token type ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -