Ирония Уменьшить-Уменьшить Проблемы

Я пытался выяснить эту проблему почти 2 недели. Сначала это были ошибки сдвига-уменьшения, а теперь проблемы уменьшения-уменьшения. Я пытался сделать это так много способов, и теперь я пришел к тому, что мне просто нужна помощь. Я написал много языков и начал работать почти 10 лет назад, и это первый раз, когда я на самом деле отправляю сообщения о помощи.

Я пытаюсь написать класс грамматики для Angel Script, популярного скриптового движка. Я получил грамматику BNF из класса анализатора. Вы можете найти ссылку на язык здесь http://www.angelcode.com/angelscript/sdk/docs/manual/doc_script.html

И в своем классе для каждого правила я добавил комментарий к грамматике BNF, которую я пытаюсь скопировать. На данный момент я не использую ключевые слова, которые я определяю. Я вернусь и попытаюсь почистить его, как только смогу заставить его работать без конфликтов. Вот мой класс http://pastebin.com/FydCTqmU

Вы должны иметь возможность просто создать Dll и запустить его с помощью грамматического обозревателя, и вы увидите все ошибки. Кажется, что большинство ошибок происходит из-за одной и той же проблемы, поэтому я думаю, может быть, как только я смогу это исправить, это исправит почти все. Я написал приложение, которое помогло бы мне разбить грамматику на более менее специфические разделы, но я думаю, что это привело к тому, что я столкнулся с более сложными проблемами.

Я попытался сжать мой код, чтобы, надеюсь, пройти через ошибки уменьшения-уменьшения, но, похоже, он остался прежним, но выглядит только более загроможденным. Если кто-нибудь может помочь мне сделать это правильно, я буду более чем счастлив отправить им несколько сотен долларов через PayPal. Я просто собираюсь сдаться, прошло более 2 недель, я был на этом. Мой электронный адрес Anth0ny229@live.com.

Я пошел от сдвига-уменьшения к уменьшению-уменьшению ошибок. Кажется, что бы я ни делал, у меня возникают проблемы. Я просто не могу обернуть голову вокруг, и мне действительно нужна помощь. Как я уже говорил, я буду более чем рад заплатить кому-то за помощь, просто напишите мне. Я планирую сделать расширение Visual Studio, например babelua, чтобы люди могли писать сценарии Angel Script Script с использованием Visual Studio, а также, надеюсь, добавить поддержку отладки. Это будет бесплатно, потому что я думаю, что это будет отличным дополнением. Так что, если кто-то может помочь каким-либо образом, пока его работа в конце концов будет более чем рада, он будет рад убедиться, что он вознагражден. Спасибо.

Состояние S0 (неадекватно) Уменьшить-уменьшить конфликты на входах: const-идентификатор void int8 int16 int32 int64 int uint8 uint16 uint32 uint64 uint float double bool? auto:: Shift items:

script' -> ·script EOF 
script -> ·script_0_list 
script_0_list -> ·script_0+ 
script_0+ -> ·script_0+ script_0 
script_0+ -> ·script_0 
script_0 -> ·import 
import -> ·import type import_0_opt identifier paramlist from string ; 
script_0 -> ·enum 
enum -> ·enum_0_opt enum identifier { identifier enum_1_opt enum_2_list } 
enum_0_opt -> ·shared 
script_0 -> ·typedef 
typedef -> ·typedef primtype identifier ; 
script_0 -> ·class 
class -> ·class_0_list class identifier class_1_opt { class_2_list } 
class_0_list -> ·class_0+ 
class_0+ -> ·class_0+ class_0 
class_0+ -> ·class_0 
class_0 -> ·shared 
class_0 -> ·abstract 
class_0 -> ·final 
script_0 -> ·mixin 
mixin -> ·mixin class 
script_0 -> ·interface 
interface -> ·interface_0_opt interface identifier interface_1_opt { interface_2_list } 
interface_0_opt -> ·shared 
script_0 -> ·funcdef 
funcdef -> ·funcdef type funcdef_0_opt identifier paramlist ; 
script_0 -> ·virtprop 
virtprop -> ·virtprop_0_opt type virtprop_1_opt identifier { virtprop_2_list } 
virtprop_0_opt -> ·private 
virtprop_0_opt -> ·protected 
script_0 -> ·func 
func -> ·func_0_opt func_1_opt identifier paramlist func_2_opt func_3_list statblock 
func_0_opt -> ·private 
func_0_opt -> ·protected 
func_0_opt -> ·shared 
script_0 -> ·var 
var -> ·var_0_opt type identifier var_1_opt var_2_list ; 
var_0_opt -> ·private 
var_0_opt -> ·protected 
script_0 -> ·namespace 
namespace -> ·namespace identifier { script } 
script_0 -> ·;

Уменьшить предметы:

script_0_list -> · [EOF]
enum_0_opt -> · [enum]
class_0_list -> · [class]
interface_0_opt -> · [interface]
virtprop_0_opt -> · [const identifier void int8 int16 int32 int64 int uint8 uint16 uint32 uint64 uint float double bool ? auto ::]
func_0_opt -> · [const ~ identifier void int8 int16 int32 int64 int uint8 uint16 uint32 uint64 uint float double bool ? auto ::]
var_0_opt -> · [const identifier void int8 int16 int32 int64 int uint8 uint16 uint32 uint64 uint float double bool ? auto ::]

Переходы:

script->S1, script_0_list->S2, script_0+->S3, script_0->S4, import->S5, import->S6, enum->S7, enum_0_opt->S8, shared->S9, typedef->S10, typedef->S11, class->S12, class_0_list->S13, class_0+->S14, class_0->S15, abstract->S16, final->S17, mixin->S18, mixin->S19, interface->S20, interface_0_opt->S21, funcdef->S22, funcdef->S23, virtprop->S24, virtprop_0_opt->S25, private->S26, protected->S27, func->S28, func_0_opt->S29, var->S30, var_0_opt->S31, namespace->S32, namespace->S33, ;->S34

1 ответ

Конфликт означает, что ваша грамматика неоднозначна, есть 2 или более способов разобрать одно и то же.

Конфликт уменьшения уменьшения означает, что разные нетерминалы могут применяться к одному и тому же входу. В вашем случае, я думаю, это потому, что число типа "5" может быть как int8, int16 и т. Д.

Совет: GNU Bison использует алгоритм синтаксического анализа, аналогичный Irony, его справочные страницы весьма полезны при работе с такого рода ошибками.