2017-05-31 4 views
0

Ich muss Motion-Control-Programme (CNC-Maschinen, Gcode)yacc lex wenn CNC GCODES Parsen

Es ist Gcode und ähnlich aussehende Code spezifisch für Hardware analysieren.

Es gibt viele Befehle sind, die aus einem einzelnen Buchstaben und Zahlen bestehen, zB:

C100Z0.5C100Z-0.5 
C80Z0.5C80Z-0.5 

So Teil meiner (abgekürzt) lex (racc & rex tatsächlich) wie folgt aussieht:

A {[:A,text]} 
B {[:B,text]} 
... 
Z {[:Z,text]} 

so finde ich einen Befehl, dass jeder Brief als Argument übernimmt und in racc begann Typisierung:

letter : A 
     | B 
     | C 
...... 

Dann habe ich aufgehört, ich habe YACC nicht verwendet ist 30 Jahre, gibt es eine Art von Abkürzung für die oben genannten? Bin ich furchtbar vom Kurs abgekommen?

Antwort

0

Es ist nicht klar, was Sie zu erreichen versuchen. Wenn Sie möchten, Yacc Regel erstellen, die alle Buchstaben deckt Sie Token dafür schaffen könnte:

%token letter_token 

In lex würden Sie mit regulären Ausdrücken jeden Buchstaben finden und einfach letter_token zurück:

Regex for letters { 

    return letter_token; 
} 

Jetzt können Sie Verwenden Sie letter_token in Yacc Regeln:

letter : letter_token 

Auch Sie haben nicht gesagt, welche Sprache Sie verwenden. Aber wenn Sie brauchen, können Sie bestimmte Zeichen, das Sie mit letter_token zugewiesen zu bekommen, durch Definieren Vereinigung:

%union { 

    char c; 
} 

%token <c> letter_token 

Angenommen, Sie einzelne Zeichen, Lex Teil bei der Zuordnung von Zeichen lesen möchten, wäre Token:

[A-Z] { 

    yylval.c = *yytext; 
    return letter_token; 
} 

Fühlen Sie sich frei, weitere Fragen zu stellen, und lesen Sie hier mehr über How to create a Minimal, Complete, and Verifiable example.

Verwandte Themen