Создание файла Bison для простой грамматики

У меня такая простая грамматика:

E -> T | ^ v . E 
T -> F T1 
T1 -> F T1 | epsilon
F -> ( E ) | v

Я новичок в Bison, поэтому я надеялся, что кто-нибудь может помочь мне показать, как написать это в таком формате. Все, что у меня есть, это следующее, но я не уверен, что это правильно:

 %left '.'
 %left 'v'
 %% /* The grammar follows.  */

 exp:
 term               {printf("1");}
 | '^' 'v' '.' exp  {printf("2");}
 ;

 term:
 factor term1       {printf("3");}
 ;

 term1:
 factor term1       {printf("4");}
 |                  {printf("5");}      
 ;

 factor:
 '(' exp ')'        {printf("6");}
 | 'v'              {printf("7");}
 ;
 %%

person John Roberts    schedule 03.03.2013    source источник


Ответы (1)


В некоторых продуктах отсутствует закрывающая точка с запятой. В исходной грамматике нет ничего, что указывало бы на то, что вам нужны постановки о строках.

person user207421    schedule 03.03.2013
comment
Вы правы насчет точек с запятой, но я думаю, что Bison исправил это для меня во время компиляции - файл .output был таким же до и после. Хороший момент по поводу линий. Все остальное совпадает? - person John Roberts; 03.03.2013
comment
Спасибо. Мне было интересно, можете ли вы также сказать мне, следует ли создавать файл .output, правила% left вверху или нет. - person John Roberts; 03.03.2013
comment
Они имеют значение, но опять же, в исходной грамматике нет ничего, что говорило бы вам, являются ли они левоассоциативными или нет. С другой стороны, большинство операторов, за исключением возведения в степень, левоассоциативны, так что это хорошее предположение. Но для курсовой работы я бы не стал их включать, если это не приведет к двусмысленности, о которой вам расскажут бизоны. Являются ли они операторами Паскаля для разыменования и членства в записях? - person user207421; 03.03.2013
comment
Я не указывал это в вопросе, но это грамматика лямбда-исчисления, и одно из требований состоит в том, чтобы «v» оставалось ассоциативным и связывалось сильнее, чем «.». Меня немного смущает, что терминология связывает более жестко, чем если честно, но я предполагаю, что это означает, что у нее более высокий приоритет. - person John Roberts; 03.03.2013
comment
В этом случае исходная грамматика неверна, поскольку дает им обоим одинаковый приоритет. Разберитесь в этом в первую очередь. Не путайте ассоциативность с приоритетом. - person user207421; 03.03.2013
comment
Я думал, что размещение правила ассоциативности под другим правилом подразумевает более высокий приоритет, не так ли? - person John Roberts; 03.03.2013
comment
Кхм, да, упс, давно уже: - | - person user207421; 04.03.2013