2017-10-29 7 views
-1

Ich möchte eine Textdatei mit einer bestimmten Syntax analysieren.Parsing den Text mit lex

Der Inhalt Datei wäre wie

The Living Room is a room. 

ich folgende Token in lex

The   return THETOK; 
[a-zA-Z]*  return ROOMNAME; 
"is a room." return ISROOMTOK; 

Und in der yacc-Datei geschrieben habe, habe ich

command: THETOK ROOMNAME ISROOMTOK 
      { 
       printf($2); 
      } 
folgende

geschrieben

Dies funktioniert für den Text wie

The kitchen is a room. 

Aber nicht funktioniert für

The Living Room is a room. 

Vielen Dank im Voraus. #TIA

+0

* Yacc * tut das Parsing. * lex * macht die lexikalische Analyse. Klar sein. Deine Grammatik erlaubt nicht die Syntax, die du benutzen willst, und dein Lexer hat irgendeine Regel, die 'Leben' erkennen würde. – EJP

+0

Es muss nicht nur Leben sein, es kann ein beliebiger Name wie Küche, Flur, Schlafzimmer usw. sein. Die Syntax lautet: Die ist ein Raum. Muss so implementiert werden, dass Leerzeichen haben kann. – user990967

+1

Ich würde eine strengere Spezifikation als das benötigen. – EJP

Antwort

0
[a-zA-Z ]*  return ROOMNAME; 

werden Leerzeichen in Ihr Token ROOMNAME übereinstimmen. (Aber es wird auch Ihre gesamte Eingabe-Zeichenfolge, außer für den Zeitraum übereinstimmen.)

Allerdings frage ich mich, ob es mehr zu Ihrer Lex-Spezifikation als Sie gezeigt haben, da ich nicht folgen, wie die Leerzeichen zwischen "The "und" Küche "und" Küche "und" ist "werden behandelt. Werden Räume anderswo verbraucht? Werden sie vom Standardmuster verworfen?