Кей писал:
Только первое в x в z: x |'<'!у?'>', где y: x (','! x) *, встречается в результирующем AST.Но только если я скомпилирую код, используя Antlr3, развернутый в репозиториях maven.С AntlrWorks я вижу правильное дерево.
ANTLRWorks создает дерево разбора, не AST, создаваемый вашими правилами синтаксического анализатора (при условии, что вы говорите о интерпретаторе ANTLRWorks).
Простой тест показывает, что все работает отлично (протестировано с ANTLR v3):
grammar T;
options {
output=AST;
}
z : x
| '<'! y? '>'!
;
y : x (','! x)*
;
x : X
;
X : 'A'..'Z'
;
будет анализировать входные данные:
<X,Y,Z>
в следующее AST:
, как вы можете проверить себя:
import org.antlr.runtime.*;
import org.antlr.runtime.tree.*;
import org.antlr.stringtemplate.*;
public class Main {
public static void main(String[] args) throws Exception {
TLexer lexer = new TLexer(new ANTLRStringStream("<X,Y,Z>"));
TParser parser = new TParser(new CommonTokenStream(lexer));
CommonTree tree = (CommonTree)parser.z().getTree();
DOTTreeGenerator gen = new DOTTreeGenerator();
StringTemplate st = gen.toDOT(tree);
System.out.println(st);
}
}
Кей написал:
Является б: аа *;с: дб?д;семантически неправильно?
Нет.Но связан ли этот вопрос с вашим правилом z: x | '<'! y? '>'
?Извините, но вы немного расплывчаты.
Кей написал:
Что я делаю не так?
Я не знаю.Вы должны будете опубликовать короткий, автономный пример здесь, на SO, так же, как я написал.Извините, я не заинтересован в переходе по внешней ссылке и прохождении сотен строк кода.