Превключване на режимите на Antlr lexer от парсер

Как да контролирате превключването на Antlr lexer режими от действията на анализатора? Разширих генерирания анализатор и лексер, така че да мога да извикам pushMode и popMode от анализатора, който на свой ред да извика подходящи pushMode и popMode на лексер, но без ефект. Има ли нещо, което мога да направя, за да активирам тази функционалност?


person Angie    schedule 25.09.2013    source източник
comment
Подозирам, че по времето, когато правилата на анализатора са засегнати, лексерът вече е започнал да прави токени след точката, в която искате да се случи превключването... Възможно ли е да се определят точките на превключване с помощта на само лексерски правила? Ако не, може би има някакъв начин да пренавиете потока от токени на лексера и да изхвърлите токените, на които нямате доверие.   -  person Darien    schedule 25.09.2013


Отговори (1)


Вашият лексер трябва да бъде написан така, че входът да може да бъде напълно токенизиран, преди анализаторът дори да бъде създаден. Въпреки че потокът от токени е лениво попълнен, ANTLR 4 не е гарантирано да анализира правилно входа, ако вашият лексер не отговаря на това изискване.

person Sam Harwell    schedule 25.09.2013