2017-09-09 11 views
0

Je fais un projet avec un sous-ensemble Pascal. Mon code ressemble:Flex - nouvelle ligne non reconnue

NLINE  [\n] 
BRACKET  ['('|')'] 

%% 

{BRACKET} { 
    std::cout << "Found BRACKET symbol " << yytext[0] << std::endl; 
    return yytext[0]; 
} 

{NLINE} { 
    std::cout << "Found NEWLINE symbol " << yytext[0] << std::endl; 
    yylineno++; 
} 

... 

. { // anything is exactly before EOF 
    std::cout << "Found ANYTHING " << yytext[0] << std::endl; 
    yylval = NONE; 
    return yytext[0]; 
} 

J'ai essayé plusieurs façons de traiter avec cela, aussi juste \ n au lieu de [\ n] ou [\ n], mais sans les résultats escomptés. Voici la sortie:

... 
Found BRACKET symbol) 
Found ANYTHING ; 
Found ANYTHING << where in code should be \n 

Je sais que cela est \ question n, parce que quand je pousse le code sans que cela fonctionne comme un charme!

Apprécierez chaque réponse constructive.

+1

Le motif correct pour correspondre '(' ou ')' est '[()]'. Votre motif correspond à une parenthèse, une apostrophe ou une barre verticale. – rici

+0

Aussi, je n'ai aucune idée de ce que vous entendez par "quand je pousse le code sans ça". – rici

+0

Je veux dire quand je coupe tout le \ n du fichier d'entrée. Tout juste en une ligne, ce qui n'est pas très confortable. Désolé, je ne me suis pas exprimé assez clairement. – Kris

Répondre

0

Le problème semblait être le symbole de retour chariot. Au cas où vous auriez un problème similaire, si cela ne vous aide pas, vous devriez vérifier les autres caractères non imprimables.

Dans mon cas, aidé:

DELIM  [ \t\r] 

DELIM est "eated" dans ma solution pour ne règle est appliquée.