2011-01-06 10 views
0

私は知りませんが、よく言われていない質問は、他にどのように頼むべきかわかりません。 私は何を入力しているかにかかわらず、エラーブランチに終わっているように見えますが、どこでこれを止めているのか分かりません。私はちょうどここでC#Lex Yacc、文字リテラルをトークン化すべきですか?

で使用するために、このすべてを設定GPPGと呼ばレックス/ YACCの特定の味が私Yは

ある
method  : L_METHOD L_VALUE ')' { System.Diagnostics.Debug.WriteLine("Found a method: Name:" + $1.Data); } 
      | error { System.Diagnostics.Debug.WriteLine("Not valid in this statement context ");/*Throw new exception*/ }   
      ; 

を使用していますと、ここで私のレックス

\'[^']*\'   {this.yylval.Data = yytext.Replace("'",""); return (int)Tokens.L_VALUE;} 
[a-zA-Z0-9]+\(  {this.yylval.Data = yytext; return (int)Tokens.L_METHOD;} 

アイデアです私は Method('value')をそれに渡して、これが正しい構文であることを正しく認識しなければならないということです。

最終的には計画はexecですMethodに値としてさまざまなパラメータを渡してください

私はまたいくつかの派生を試みました。

答えて

1

yacc文法で認識できるように、句読トークンを「そのまま」戻すには、lexルールが必要です。次のようなものがあります:

[()]  { return *yytext; } 

は、2番目の例に追加してください。

+0

大変ありがとうございます!私はそれが盲目的に単純なものでなければならないことを知っていた。 GPPGの場合、次のようになります。 '[()] \t \t \t {return(int)yytext [0]; } '特定の文字をサポートします。 – Beta033

関連する問題