Я пытался выяснить эту же проблему уже почти 2 недели. Сначала это были ошибки смены-сдвига, теперь их проблемы сокращения. Я пробовал делать это так много, и теперь я пришел к тому, что мне просто нужна помощь. Я закодировал много языков и начал работу почти 10 лет назад, и это первый раз, когда я когда-либо отправлял информацию о помощи.Проблемы с уменьшением иронического решения
Я пытаюсь написать класс грамматики для Angel Script - популярный скриптовый движок. Я получил грамматику BNF из класса парсера. Вы можете найти здесь ссылку на язык http://www.angelcode.com/angelscript/sdk/docs/manual/doc_script.html
И в рамках моего класса для каждого правила я добавил комментарий к грамматике BNF, которую я пытаюсь скопировать. На данный момент я не использую ключевые слова, которые я определяю. Я вернусь и попробую очистить его, как только я смогу заставить его работать без конфликтов. Вот мой класс http://pastebin.com/FydCTqmU
Вы должны иметь возможность просто создать Dll и запустить это с помощью программы-анализатора грамматики, и вы увидите все ошибки. Похоже, что большинство ошибок исходят из одной и той же проблемы, поэтому я думаю, что, возможно, однажды я смогу получить исправление, это исправит почти все. Я написал приложение, чтобы помочь мне разделить грамматику на более менее конкретные разделы, но я думаю, что это привело к тому, что я столкнулся с проблемами сокращения проблем.
Я попытался сконденсировать свой код, чтобы, надеюсь, пройти ошибки сокращения, но, похоже, останется таким же, но только выглядит более загроможденным. Если кто-нибудь может помочь мне понять, что я буду счастлив послать им несколько сотен долларов через paypal. Я нахожусь в состоянии просто отказаться от его более двух недель, я был на этом. Моя электронная почта [email protected]
Я перешел от shift-reduce, чтобы уменьшить ошибки. Кажется, что бы я ни делал, у меня проблемы. Я просто наклоняю обнимаю голову, и мне действительно нужна помощь. Как я уже говорил, я буду более счастлив заплатить кому-то за помощь, просто напишите мне. Я планирую сделать расширение Visual Studio, например babelua, чтобы люди могли писать скрипты Script Script с помощью Visual Studio, а также, надеюсь, добавить поддержку отладки. Это будет бесплатно, потому что я думаю, что это будет отличным дополнением. Поэтому, если кто-то может помочь в любом случае, пока его работа в конце концов будет более счастливой, чтобы удостовериться, что они вознаграждены. Спасибо.
Состояние S0 (неадекватно) Уменьшить конфликты на входах: const идентификатор void int8 int16 int32 int64 int uint8 uint16 uint32 uint64 uint float double bool? Авто :: Сдвиг элементов:
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
Благодарим вас за предложения и советы. Я пробовал и все еще застрял, но это очень помогло. Спасибо! – Anth0ny229
@ Anth0ny229 Удачи. При дальнейшей проверке я также думаю, что это потому, что вы пытаетесь кодировать систему типов в грамматику.Это не рекомендуется (и может быть даже невозможно), особенно с парсером LALR (1), таким как Ирония. В основном вы хотите сначала разобрать слишком широко и игнорировать типы, а затем ограничить это, если у вас есть дерево разбора. Я рекомендую прочитать синтаксический анализатор и написать главы системы [хорошей компиляторной книги] (http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811). – dtech