@Grapes([
@Grab(group="org.antlr", module="antlr4", version="4.8")
])
import org.antlr.v4.runtime.ANTLRInputStream
import org.antlr.v4.runtime.Token
import org.antlr.v4.tool.Grammar
import org.antlr.v4.tool.LexerGrammar
import org.antlr.v4.runtime.CommonTokenStream
def lg = new LexerGrammar("""
lexer grammar N;
WS : [ \\t]+ -> skip ;
MACHINE: 'machine';
ACCOUNT: 'account';
ID: ~('\\r' | '\\n' | ' ' | '\\t')+;""")
def g = new Grammar("""
parser grammar N;
net: machineEntry+ EOF;
machineEntry: MACHINE ACCOUNT?; """, lg)
def ais = new ANTLRInputStream("""machine random""")
def lexEngine = lg.createLexerInterpreter(ais)
def tokens = new CommonTokenStream(lexEngine)
def parser = g.createParserInterpreter(tokens)
def t = parser.parse(g.rules.get("net").index)
for (Token token in tokens.getTokens()) {
println("${token} , ${parser.getVocabulary().getSymbolicName(token.getType())}")
}
println(t.toStringTree(parser))