而不是
skip()-ping
WS令牌,也将其放在
HIDDEN通道上:
grammar Example;@parser::members { void calculateSha1(String text) { try { java.security.MessageDigest md = java.security.MessageDigest.getInstance("SHA-1"); byte[] sha1 = md.digest(text.getBytes()); System.out.println(text + "n" + java.util.Arrays.toString(sha1) + "n"); } catch(Exception e) { e.printStackTrace(); } }}parse : method+ EOF ;method@after{calculateSha1($text);} : 'call' ID ;ID : 'A'..'Z'+;WS : (' ' | 't' | 'n' | 'r')+ {$channel=HIDDEN;};COMMENT : '' {$channel=HIDDEN;};上面的语法可以通过以下方式进行测试:
import org.antlr.runtime.*;public class Main { public static void main(String[] args) throws Exception { String source = "call ABC call ABC"; ExampleLexer lexer = new ExampleLexer(new ANTLRStringStream(source)); ExampleParser parser = new ExampleParser(new CommonTokenStream(lexer)); parser.parse(); }}它将以下内容打印到控制台:
致电ABC[48,-45,113,5,-52,-128,-78,75,-52,-97,-35,25,-55,59,-85,96,-58,58,-96, 10]致电/ * DEF * / ABC[-57,-2,-115,-104,77,-37,4,93,116,-123,-47,-4,33,42,-68,-95,-43,91,94, 77]
即:相同的解析器规则,但不同
$text的(因此具有不同的SHA1)。



