как интерпретировать это правило в yacc?"::" {yycolumn + = yyleng;возврат (TYPESEPnumber);} - PullRequest
0 голосов
/ 28 ноября 2018

Мне нужно исправить программу, написанную на yacc (генератор синтаксического анализатора), чтобы она работала вместе с предоставленным файлом "lexer.l", чтобы создать небольшой интерпретатор (я не могу внести никаких изменений в lexer.l).И я нашел эту строку в файле lexer.l, которую я не знаю, как интерпретировать

вот неизвестные правила ...

%%

"::" { yycolumn + = yyleng; return (TYPESEPnumber); }

%%

Может ли кто-нибудь помочь мне понятькак "::" работает в этом случае?Итак, следующая тестовая программа должна работать: программа xx имеет вид {

 a :: int;
 a = 5;
 print "My job is to test the print function. Here is an int: " , 55 , " and the 
 value of var a: " , a;

}

Я мог бы заставить мой интерпретатор yacc работать с файлом, если бы тестовый файл был простым, как этот:

int a;

a = 5;

etc etc..

но не в этом взятии строк " a :: int; " в моем тестовом файле.Помогите .. Спасибо!

1 Ответ

0 голосов
/ 28 ноября 2018

Это означает, что токен :: отправляется парсеру как TYPESEPnumber.(Я понятия не имею, почему кто-то может добавить number в конец идентификатора токена.)

Так что я ожидаю, что пролог парсера будет включать:

%token TYPESEPnumber "::"

И что-то производственноекак

declaration: ID "::" type ';'

(Некоторые профессора не используют удобный синтаксис bison для псевдонимов неуклюжих идентификаторов токенов в легко понимаемых строках в кавычках. Но это делает грамматику намного проще для чтения.)

...