質問:
LALR解析:生成された解析テーブルから文法規則を取得します
Seki
2013-12-10 23:35:29 UTC
view on stackexchange narkive permalink

古いYaccから生成された非常に古いC企業パーサー/コンパイラコードがあり、元の文法ソースが(中間ファイルとして)失われ、 ytab.c パーサーが生成した唯一の結果ファイル。そのレガシーコードは修正が必要ですが、最初から再コーディングする余裕はありません。

「古代Yacc」とは、パーサーが yyact yypact yypgo yyr1 yyr2 yytoks yyexca yychk yydef

解析テーブルを差し引くことにより、解析ルールを機械的に取得/再生成して、文法?

同じ古代のYaccで処理できる式パーサーの小さなサンプルの例:

  yytabelem yyexca [] = {-1、1、0 、-1、-2、0、-1、21、261、0、-2、8、}; yytabelem yyact [] = {13、9、10、11、12、23、8、22、13、9 、10、11、12、9、10、11、12、1、2、11、12、6、7、4、3、0、16、5、0、14、15、0、0、0、17 、18、19、20、21、0、0 、24}; yytabelem yypact [] = {-248、-1000、-236、-261、-236、-236、-1000、-1000、-248、-236、-236、-236、-236、- 236、-253、-1000、-263、-245、-245、-1000、-1000、-249、-1000、-248、-1000}; yytabelem yypgo [] = {0、17、24}; yytabelem yyr1 [] = {0、1、1、1、2、2、2、2、2、2、2、2、2}; yytabelem yyr2 [] = {0、8、12、0、6、6 6、6、6、6、4、2、2}; yytabelem yychk [] = {-1000、-1、266、-2、259、263、257、258、267、262、263、264、265、 261、-2、-2、-1、-2、-2、-2、-2、-2、260、268、-1}; yytabelem yydef [] = {3、-2、0、0、0 、0、11、12、3、0、
0、0、0、0、0、10、1、4、5、6、7、-2、9、3、2}; yytoktype yytoks [] = {"NAME"、257、 "NUMBER"、258、 「LPAREN」、259、「RPAREN」、260、「EQUAL」、261、「PLUS」、262、「MINUS」、263、「TIMES」、264、「DIVIDE」、265、「IF」、266、「THEN "、267、" ELSE "、268、" LOW "、269、" UMINUS "、270、" -unknown- "、-1 / *検索を終了します* /};  

I取得しようとしています

  stmt:IF exp THEN stmt | IF exp THEN stmt ELSE stmt | / *その他* /; exp:exp PLUS exp | expマイナスexp | exp TIMES exp | exp DIVIDE exp | exp EQUAL exp | LPAREN exp RPAREN |マイナス経験|名前| NUMBER;  

この例の完全なパーサーは要点として利用可能であり、ルールを含む yyreds テーブルを取り消そうとしているパーサーにないデバッグ情報。

注:これは以前はSOで尋ねたので、REで尋ねるように提案されました。何か助けがありますか?

PS:REの質問タグに慣れていないので、遠慮なく修正してください。

編集をご覧ください:)
1 回答:
Igor Skochinsky
2013-12-11 04:46:19 UTC
view on stackexchange narkive permalink

実際の答えはありません。ツールがそれを行うという噂を聞いたことがありますが、具体的なことは何も見ていません。ただし、非常に役立つページを見つけました。

GNUBisonによって生成されたCパーサーについて

このドキュメントは、LALRの実装について説明する試みです。 (1)Bison2.3によって生成されたCのパーサー。簡単な文法を使用して、パーサーの動作とテーブルの解析の性質を示しました。これらの表と、Aho、Sethi、Ullmanによる人気のある本「Compilers-Principles、TechniquesandTools」(「DragonBook」とも呼ばれる)やコンパイラ設計に関する他の多くの本に記載されている非圧縮の表形式との比較もあります。 。

こちらをご覧ください。

編集:それを主張するスクリプトを見つけました!

http://nah6.com/~itsme/cvs-xdadevtools/perlutils/yydecode.pl

ただし、別のセットで使用することを目的としているようですテーブルの。それでも、それはスタートに役立つかもしれません。



このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...