私はこの同じ問題をほぼ2週間理解しようとしています。最初はシフト削減エラーでしたが、現在は削減削減問題です。私はそれを非常に多くの方法で試しましたが、今では助けが必要なところまで来ました. 私は多くの言語をコーディングしており、ほぼ 10 年前にコーディングを始めましたが、実際にヘルプを投稿したのはこれが初めてです。
パーサー クラスから BNF 文法を取得した、人気のあるスクリプト エンジンである Angel Script の文法クラスを作成しようとしています。ここで言語リファレンスを見つけることができますhttp://www.angelcode.com/angelscript/sdk/docs/manual/doc_script.html
そして、各ルールのクラス内に、コピーしようとしている BNF 文法のコメントを追加しました。現時点では、私が定義したキーワードを実際には使用していません。競合なしで動作するようになったら、戻ってクリーンアップを試みます。ここに私のクラスがありますhttp://pastebin.com/FydCTqmU
Dll を作成して文法エクスプローラーで実行するだけで、すべてのエラーが表示されます。ほとんどのエラーはすべて同じ問題に起因しているように見えるので、おそらくそれを修正できれば、ほとんどすべてが修正されると思います. 文法をより具体的ではないセクションに分割するのに役立つアプリを作成しましたが、それがより多くのreduce-reduceの問題にぶつかったと思います。
うまくいけばreduce-reduceエラーを通過できるようにコードを圧縮しようとしましたが、まったく同じままのようですが、見た目が雑然としています。誰かが私がそれを正しくするのを手伝ってくれるなら、私は喜んで数百ドルをペイパル経由で送ります. 私はこれを2週間以上続けてきたので、あきらめようとしています。私のメールアドレスは Anth0ny229@live.com です。
shift-reduce から reduce-reduce エラーに変わりました。何をしても問題が発生するようです。頭を包むことができず、本当に助けが必要です。私が言ったように、私は私に電子メールを送るだけで助けのために誰かにお金を払って喜んでいます. 私は、babelua のような Visual Studio 拡張機能を作成して、人々が Visual Studio を使用して Angel Script Scripts を記述できるようにすることを計画しています。また、うまくいけば、デバッグ サポートも追加します。これは素晴らしい追加になると思うので無料になります。したがって、最終的に機能する限り、誰かが何らかの形で支援できる場合は、彼らが報われることを確認して喜んでください. ありがとうございました。
状態 S0 (不十分) 入力に対する削減-削減競合: const 識別子 void int8 int16 int32 int64 int uint8 uint16 uint32 uint64 uint float double bool ? auto :: シフト項目:
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