ANTLR(7) - Mini Irenka Query
次のクエリをベースに、エラーリカバリの検査。
Irenkaで使ってるクエリ言語の機能を半分くらいにしてます。
@when hoge.foo.bar = {@link String}
くらいなら書ける。
ASTの生成
grammar Recovery1; options { output = AST; ASTLabelType=CommonTree; } tokens { QUERY; CONSTRAINT; PLACEHOLDER; LINK; PROPERTY='.'; TYPE_NAME; DECLARED_TYPE; } @header { package research; } @lexer::header { package research; } query : '@when' constraint* -> ^(QUERY constraint*) ; constraint : expression '=' expression -> ^('=' expression expression) ; expression : term -> term ; term : primary_term ( PROPERTY^ NAME )* ; primary_term : placeholder -> placeholder | '{@link' link '}' -> link ; placeholder : NAME -> ^(PLACEHOLDER NAME) ; link : type_name -> ^(DECLARED_TYPE type_name) ; type_name : NAME ( '.' NAME )* -> ^(TYPE_NAME NAME*) ; NAME : ('A'..'Z'|'a'..'z'|'_') ('A'..'Z'|'a'..'z'|'0'..'9'|'_')* ; WHITE_SPACE : ( ' ' | '\t' | '\r' | '\n' )+ { $channel = HIDDEN; } ;
目標は id:ashigeru:20070910:1189391042 の実現性についての検証。今日中にめどを立てたい。