2013-03-03 3 views
0

У меня есть следующая простая грамматика:Создания 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");} 
; 
%% 

ответ

1

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

+0

Вы правы насчет точки с запятой, но я думаю, что Bison исправил это для меня во время компиляции - файл .output был таким же до и после. Хорошая мысль о линиях. Состоит ли все остальное? –

+0

Да, это нормально. – EJP

+0

Спасибо. Мне было интересно, можете ли вы также сказать мне, следует ли создавать файл .output,% left rules в верхнем случае или нет. –

Смежные вопросы