2011-01-06 5 views
0

Ich weiß, schlecht formulierte Frage nicht sicher, wie sonst zu fragen. Ich scheine immer im Fehlerzweig zu enden, egal was ich betrete und kann nicht herausfinden, wo ich das vermassele. Ich bin ein besonderen Geschmack von Lex mit/YACC genannt GPPG, die gerade diese für den Einsatz alle einrichtet mit C#Lex Yacc, sollte ich Zeichenliterale in Tokens setzen?

Hier ist meine 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*/ }   
      ; 

hier ist meine Lex

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

Die Idee ist, dass ich in der Lage sein, Method('value') daran zu übergeben und es richtig erkennen, dass dies die richtige Syntax ist

schließlich ist der Plan zu exec ute die Method Übergabe der verschiedenen Parameter als Werte

Ich habe auch mehrere Ableitungen ausprobiert. zum Beispiel:

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;} 

Antwort

1

Sie brauchen eine lex Regel die Zeichensetzung Token zurückzukehren ‚wie sie ist‘, so dass die yacc Grammatik sie erkennen kann. Etwas wie:

[()]  { return *yytext; } 

hinzugefügt zu Ihrem zweiten Beispiel sollte den Trick tun.

+0

vielen dank! Ich wusste, dass es etwas blendend einfaches sein musste. Für GPPG ist es so gemacht: '[()] \t \t \t {return (int) yytext [0]; } 'um bestimmte Zeichen zu unterstützen. – Beta033

Verwandte Themen