Может ли кто-нибудь помочь мне преобразовать этот файл грамматики ANTLR 2.0 в синтаксис ANTLR 3.0?
Вопрос
Я преобразовал «легкие» части (фрагмент, @header и @member declerations и т. Д.), Но так как я новичок в Antlr, мне очень трудно преобразовать операторы деревьев и т. Д.
Я использую следующее руководство по миграции.
Файл грамматики можно найти здесь....
Ниже вы можете найти несколько примеров, когда я сталкиваюсь с проблемами:
Например, у меня проблемы с:
n3Directive0!:
d:AT_PREFIX ns:nsprefix u:uriref
{directive(#d, #ns, #u);}
;
или
propertyList![AST subj]
: NAME_OP! anonnode[subj] propertyList[subj]
| propValue[subj] (SEMI propertyList[subj])?
| // void : allows for [ :a :b ] and empty list "; .".
;
propValue [AST subj]
: v1:verb objectList[subj, #v1]
// Reverse the subject and object
| v2:verbReverse subjectList[subj, #v2]
;
subjectList![AST oldSub, AST prop]
: obj:item { emitQuad(#obj, prop, oldSub) ; }
(COMMA subjectList[oldSub, prop])? ;
objectList! [AST subj, AST prop]
: obj:item { emitQuad(subj,prop,#obj) ; }
(COMMA objectList[subj, prop])?
| // Allows for empty list ", ."
;
Решение
n3Directive0!:
d=AT_PREFIX ns=nsprefix u=uriref
{directive($d, $ns, $u);}
;
- Вы должны использовать '=' для присвоений.
- Затем токены можно использовать как $tokenname.getText(),...
- Результаты правил затем можно использовать в вашем коде как «имя_правила.результат».
- Если у вас есть правила, в которых объявлены имена результатов, вам необходимо использовать эти имена iso.
'результат'.
Не связан с StackOverflow