Синтаксический анализ LR для арифметических выражений

#c# #lr

#c# #lr

Вопрос:

У меня есть грамматика LR и таблица LR для таких выражений, как (1 1), 1 (a 1)

0: E’->E

1: E ->E T

2: E-> T

3: T -> T * F

4: T-> F

5: F ->( E)

6: F-> id

 string[,] ActionTable = 
   //          *       (       )       id   end     E      T       F 
 {   

 {""     ,""     ,"S4"   ,""     ,"S5"   ,""    ,"1"    ,"2"    ,"3"}, // 0
 {"S6"   ,""     ,""     ,""     ,""     ,"AC"  ,""     ,""     ,"" }, // 1
 {"R2"   ,"S7"   ,""     ,"R2"   ,""     ,"R2"  ,""     ,""      ,""},//2                                                              
 {"R4"   ,"R4"   ,""     ,"R4"   ,""     ,"R4"  ,""     ,""     ,""},  // 3                                
 {""     ,""     ,"S4"   ,""     ,"S5"   ,""    ,"8"    ,"2"    ,"3"}, // 4                                
 {"R6"   ,"R6"   ,""     ,"R6"   ,""     ,"R6"  ,""     ,""     ,""},  // 5                               
 {""     ,""     ,"S4"   ,""     ,"S5"   ,""    ,""     ,"9"    ,"3"}, // 6                                
 {""     ,""     ,"S4"   ,""     ,"S5"   ,""    ,""     ,""     ,"10"},// 7                                
 {"S6"   ,""     ,""     ,"S11"  ,""     ,""    ,""     ,""     ,""},  // 8                                
 {"R1"   ,"S7"   ,""     ,"R1"   ,"R1"   ,""    ,""     ,""     ,""},  // 9                                
  {"R3"   ,"R3"   ,""     ,"R3"   ,"R3"   ,""    ,""     ,""     ,""},  //10                                                               
 {"R5"   ,"R5"   ,""     ,"R5"   ,"R5"   ,""    ,""     ,""     ,""}   //11
                        };
  

Я пытаюсь проверить выражение типа 1 1 или 1 (1 * a) 1, но анализатор говорит, что это выражение неверно.

Что я могу сделать с моей грамматикой, чтобы исправить это?

Ответ №1:

У вас нет производственного правила для чисел.

Комментарии:

1. как насчет E -> E T, T-> F , F-> id ?

2. Это хороший довод. Предполагается, что id это сопоставляется только с переменными.

3. Может быть, мне следует изменить свою грамматику?