State Machine Compiler für 8-bit AVRs?

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From German to

Threaded View
Hallo an alle,

ich verwende seit knapp 4 Jahren immer wieder den Ragel [1] Generator


Was verwendet ihr so, sobald die Grammatik etwas komplizierter wird? Lex




[1] https://www.colm.net/open-source/ragel/

Re: State Machine Compiler für 8-bit AVRs?
Am 21.09.2019 um 11:29 schrieb Andreas Weber:
Quoted text here. Click to load it

Quoted text here. Click to load it


Meine Lexer und Parser habe ich bisher immer selbst geschrieben, das ist  

und wenn sich beide Seiten an diese halten, und sinnvolle Trennzeichen  
zwischen zwei Werten und Records einstreuen, wo sollten dann Probleme  
herkommen?

DoDi

Re: State Machine Compiler für 8-bit AVRs?
Am 21.09.19 um 12:26 schrieb Hans-Peter Diettrich:
Quoted text here. Click to load it

Dann hast du bis jetzt vielleicht keine komplizierte Grammatik gehabt.

Quoted text here. Click to load it


bestehendes Protokoll ran musst, kann man sich das nicht mehr aussuchen.

-- Andy

Re: State Machine Compiler für 8-bit AVRs?
Am 21.09.19 um 19:09 schrieb Andreas Weber:

Quoted text here. Click to load it

Eine komplizierte Grammatik ist in jedem Fall kompliziert, egal welche  
Werkzeuge man nutzt.

Wenn man das Prinzip verstanden hat, ist der Aufwand, um eine formal  

Parser gleich selbst zu schreiben, nicht sooo unterschiedlich.
Das gilt umso mehr dann, wenn der vom Generator erzeugte Codestil nicht  
recht in die verwendete Umgebung passt und man auch noch eine  


Hergen

Re: State Machine Compiler für 8-bit AVRs?
Hallo Hergen,

Am 21.09.19 um 20:37 schrieb Hergen Lehmann:
Quoted text here. Click to load it


einzusetzen?


"Verwende doch Assembler, mach BRAUCHT keinen C Compiler. Das geht auch
alles so. Die libc braucht man nicht, kann man auch in Assembler


einen wirklich, wirklich guten Grund.

Quoted text here. Click to load it

Quoted text here. Click to load it


mir den Zustandsautomaten visualisieren lassen (graphviz dot) was die
Entwicklung deutlich vereinfacht und gleich noch als Dokumentation



Quoted text here. Click to load it


Klar. In dem von mir angesprochenen Fall integriert sich das aber super
in avr-gcc und AVR libc.



git/mercurial/subversion gar nicht braucht, weil man ja die Order
einfach wegkopieren und umbenennen kann.



Re: State Machine Compiler für 8-bit AVRs?



 >einzusetzen?

Vermutlich weil es denen zu komplex ist. :-)

Ich hab fuer solche Anwendungen auf Microcontrollern auch schon flex
genutzt und wuerde es jederzeit wieder machen.  

Vorteile:
    Sehr flexibel, es ist eine kleinigkeit da mal eben einen
    neues Kommando hinzuzufuegen.

    Weil die nutzung so einfach ist, wenn man einmal damit umgehen kann,
    nutzt man es auch fuer Kleinigkeiten (z.B Debuginterface) wo man sonst
    eher denken wuerde: "Och, noe, dafuer bin ich jetzt zu faul"

Nachteile: Erzeugt ziemlich grossen C-Source. Das bekommt man von
       Hand bestimmt effizienter hin. Allerdings ist das bei den
       fetten Flash heutiger Controller kein Problem.  




Nicht zwangslaeufig weil die sich ja auch mit dem verwendeten
Generator auskennen muessen und ihn auch haben muessen.


Olaf

Re: State Machine Compiler für 8-bit AVRs?
On 22.09.19 12:48, Andreas Weber wrote:

Quoted text here. Click to load it

Quoted text here. Click to load it

Kann ich dir nicht beantworten.



Beispielgrammatik teilen um zu illustrieren, wie du es im Moment (als


Eventuell kommen dann bessere Tipps.

Johannes

--  

selben Hardware." -- Hans-Peter Diettrich in d.s.e.

Re: State Machine Compiler für 8-bit AVRs?
Hi Johannes,

Am 22.09.19 um 17:23 schrieb Johannes Bauer:
Quoted text here. Click to load it

Quoted text here. Click to load it



Ich bin bisher mit Ragel wirklich voll und ganz zufrieden und kann

wissen, was andere so verwenden. Dass das in so eine "angeregte




Re: State Machine Compiler für 8-bit AVRs?
Am 21.09.2019 um 19:09 schrieb Andreas Weber:
Quoted text here. Click to load it

Auch bei komplexeren Grammatiken ist das kein Hexenwerk.


Fehlerbehandlung haben. Wenn also irgendwo ein Trennzeichen verschluckt




sowas wie "mit dem eigenen Parser die Paketierung zerlegen, und die
Paket-Payloads dann mit was generiertem").


  Stefan

Re: State Machine Compiler für 8-bit AVRs?
Am 21.09.2019 um 19:09 schrieb Andreas Weber:
Quoted text here. Click to load it




sich ein Lexer von Hand leicht erzeugen. Bei wirklich komplizierten  


Parser funktioniert und ihn entsprechend auch selbst schreiben kann.

DoDi

Re: State Machine Compiler für 8-bit AVRs?
On 22.09.19 12:55, Hans-Peter Diettrich wrote:
Quoted text here. Click to load it











geschrieben, der bei jeder minimalen Deviation im Codestil schon


Quoted text here. Click to load it




Johannes

--  

selben Hardware." -- Hans-Peter Diettrich in d.s.e.

Re: State Machine Compiler für 8-bit AVRs?
Am 22.09.19 um 17:32 schrieb Johannes Bauer:
Quoted text here. Click to load it

Quoted text here. Click to load it





Quoted text here. Click to load it



Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it

Pascal-Compiler waren schon immer mit rekursivem Abstieg, und
sogar der gcc war nur bis Version 3 yacc/bison-basiert und hat
jetzt einen handgeschnitzten Parser.







Was ist  foo *bar?  Eine Variablen-Deklaration? Eine Multiplikation?



<  
https://stackoverflow.com/questions/6319086/are-gcc-and-clang-parsers-really-handwritten
    >




Re: State Machine Compiler für 8-bit AVRs?
On 22.09.19 20:43, Gerhard Hoffmann wrote:

Quoted text here. Click to load it

Weil sie den C und C++ gemerged haben. Und C++ /hat/ keine


41000 Zeilen Code, mehr als ein Megabyte Quellcode. Das ist also etwas,
das nicht mal eben so hinzuschreiben ist.




Insofern stehe ich zu meiner Aussage und widerspreche, dass es
"praktische alle" eben mit handgeschnitzten Parsern machen. Im
Gegenteil, wenn du mal suchst:

https://github.com/SilverScar/C-Language-Parser
Ist Lex/Yacc-basiert

https://github.com/eliben/pycparser
Nutzt ply

https://github.com/praeclarum/CLanguage
Nutzt jay

https://github.com/awi29/C-parser
Nutzt Lex/Yacc

https://github.com/vickenty/lang-c
Nutzt rustpeg

Die Wenigsten schreiben also einen Lexer/Parser "von Hand". Noch

wiegesagt C++ der Grund).



Quoted text here. Click to load it


Ich habe ja schon geschrieben, C ist kein LL(1). Keine mir bekannte
(nicht-esoterische) Programmiersprache ist LL(1), so nebenbei.


Johannes

--  

selben Hardware." -- Hans-Peter Diettrich in d.s.e.

Re: State Machine Compiler für 8-bit AVRs?
Am 22.09.2019 um 17:32 schrieb Johannes Bauer:
Quoted text here. Click to load it

Quoted text here. Click to load it









Hatte ich seinerzeit als "ToPas" bei SourceForge reingestellt.



Quoted text here. Click to load it

Dein Vermutungslevel ist als unbrauchbar notiert. Vielleicht informierst  



Quoted text here. Click to load it



Microsofts Header zu Visual C nicht standardardkonform sind, ein  


Quoted text here. Click to load it


Bis auf 1 Ausnahme ist C98 erstaunlicherweise LL(1), insgesamt also  
LL(2). Das Fehlen einer offiziellen LL-Grammatik sagt ja definitiv  


DoDi

Re: State Machine Compiler für 8-bit AVRs?
On 23.09.19 00:34, Hans-Peter Diettrich wrote:


Quoted text here. Click to load it

Sehr gut. Endlich lieferst du mal was. Ich habe mal meine VM angeworfen
und dein Meisterwerk getestet:

https://imgur.com/a/McpnjZb

Schon beim einfachen Gerumklicken fliegen einem "Access Violations" nur
so um die Ohren, dass es kracht! Das fand ich MEGA witzig, weil du ja,


Bugs, die du angeblich durch Pascal vermeidest hast du offenbar so
dutzendfach in deinem Programmchen drin, dass es UNBENUTZBAR wird. Sehr


Danach nochmal neugestartet, nichtdeterminsitisch fliegt einem eine
Access Violation schon beim BLOSSEN START des Programms um die Ohren.
Gacker! Ist das eine neue Form nichtdeterministischer Programmierung?
Wow, ich bin echt beeindruckt.









  - fehlerfrei

Okay, okay, das ist also die Messlatte. Siebenzeiler in C:

int foo(int y, ...) {
  int *x[12];
  x[3] = x[9];
  x[10] = *(&(*(x + 3)));
  "foo";
  return 0;
}

Einfach, oder? Das ist korrektes C. Na dann!

*TOMMELWIRBEL*

error translation_unit

<loriot>Ach!</loriot>




Das ist genau der Grund, warum man Parser Generatoren erfunden hat, weil
es Leute gibt, denen aufgefallen ist, dass einem Menschen halt
Cornercases oft durch die Lappen gehen. So wie dir.



Quoted text here. Click to load it





Ja sorry aber "VisualBasic Discompiler" ist offenbar so ein
unbrauchbarer Suchbegriff, dass Google gleich sagt: "Showing results for
Visual Basic Decompiler"

Ich habe also keine Ahnung, worauf du hinaus willst. Du aber offenbar
auch nicht, sondern willst ja wohl nur von deinem Turbofail ablenken.


Quoted text here. Click to load it

Quoted text here. Click to load it


Minuten gebraucht, den Testcase zu finden. Ich habe mehr Zeit damit
verbracht, die Screenshots im Gimp zu editieren, als damit, dir





schwer ist.


Quoted text here. Click to load it

C ist also kein LL(1), richtig.

Immerhin, muss man dir zu Gute halten, hast du ausnahmsweise was




Johannes

--  

selben Hardware." -- Hans-Peter Diettrich in d.s.e.

Re: State Machine Compiler für 8-bit AVRs?
Am 23.09.19 um 09:12 schrieb Johannes Bauer:
Quoted text here. Click to load it

Quoted text here. Click to load it


Quoted text here. Click to load it

Quoted text here. Click to load it


Quoted text here. Click to load it


Quoted text here. Click to load it


Quoted text here. Click to load it


Quoted text here. Click to load it


Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it



Wenn hier einer den Oberlehrer macht, dann du.
Und er muss dir auch nichts liefern, du hast nichts bei ihm gekauft.


 > *TOMMELWIRBEL*

Wirklich bewiesen hast du garnix. Du hast ein paar Exotencompiler

Compiler, die jeder hernimmt, wie gcc oder clang benutzen rekursiven
Abstieg. Und der gcc frisst dein Beispiel in einer halben Millisekunde,
problemlos, bis auf ein paar Bemerkungen, dass das Beispiel nix
Sinnvolles macht.


wie das with-statement drinnen:

with record_variablenliste do begin ... end


keine  rec.a und rec.b mehr, sondern einfach nur noch a und b.

nicht mehr. Bring das mal einem Parsergenerator nahe, wenn Variablen-

einem anderen Typ stehen.

In Jensen-Wirth's Pascal, User Manual and Report (insgesamt ein


drinnen.

Und das ganze UCSD-Pascalsystem konnte man auf einem Z80 mit
AT-Floppies compilieren.




Gerhard





Re: State Machine Compiler für 8-bit AVRs?
On 23.09.19 14:15, Gerhard Hoffmann wrote:

Quoted text here. Click to load it



der von C), und dann in der Praxis halt schon bei simpelsten Beispielen
voll auf die Nase fliegt, dann ist das ja schon ein interessantes Ergebnis.

Klar muss er nichts liefern, hat er ja bisher auch nie. Sobald es


Quoted text here. Click to load it

Doch, dass der Parser, den DoDi geschrieben hat, eben nur (wie ich

du das bestreitest, kannst du es ja gerne selber ausprobieren.

Quoted text here. Click to load it


Das sind keine Compiler, hast du die Links mal angesehen? Die erzeugen
teilweise nur einen AST und sind Libraries.

Quoted text here. Click to load it

Das ist *professionelle* Software. Mit hunderttausenden Personenstunden,
die da reingeflossen sind, sowohl in clang als auch in gcc. Und ich habe


gibt (als Bonus gibt's bessere Diagnostics dazu). Insofern sind die als

wie schwierig es ist, Lexer/Parser von Hand zu schreiben.

Ohne Not schreibt *niemand* einen Parser von Hand, auch nicht gcc und
clang. Und wenn man sich dazu entscheidet, ist das *weitaus*
schwieriger, als einen Parsergenerator zu nehmen.


Quoted text here. Click to load it



Quoted text here. Click to load it

Quoted text here. Click to load it



Recursive Descent ein ordentliches oder geeignetes Parsing-Verfahren
ist. Ich sage lediglich, dass das Schreiben eines Parsers von Hand
RICHTIG viel schwieriger ist, als einen Parsergenerator zu nehmen und

Zeit) braucht. Und bin extrem skeptisch wenn sich jemand hinstellt und
sagt "das hab ich schon gemacht, war ganz einfach". Weil >40000 Zeilen





Ja, da gehe ich mit. Wenn es einen guten Grund gibt, klar, dann schreibt
man sich seinen eigenen Parser. Damit kommen eine interessante Vorteile,




Johannes

--  

selben Hardware." -- Hans-Peter Diettrich in d.s.e.

Re: State Machine Compiler für 8-bit AVRs?
Am 23.09.2019 um 14:31 schrieb Johannes Bauer:
Quoted text here. Click to load it


Quoted text here. Click to load it

Ich warte ja auf das Gegenbeispiel, also: deinen C-Parser.

Quoted text here. Click to load it


Quoted text here. Click to load it


finden im Standard-Dokument unter "Annex A" sowie in Fragmenten in den
einzelnen Kapiteln. Sie ist halt nur nicht LL(1).

Quoted text here. Click to load it




Quoted text here. Click to load it





Quoted text here. Click to load it

Quoted text here. Click to load it

Quoted text here. Click to load it


Quoted text here. Click to load it

Quoted text here. Click to load it



zahlst du beim Debuggen drauf. Wo muss ich jetzt die Aktionen
platzieren? Wie bekomme ich das Speicherleck-frei? Wie bekomme ich







geparsed. Mit einem generierten Parser muss man damit durch ein paar
Ebenen Generat (yacc, lex) durch und dabei Annahmen treffen, wie der
generierte Code sich benimmt.


  Stefan

Re: State Machine Compiler für 8-bit AVRs?
On 24.09.19 19:18, Stefan Reuther wrote:



Quoted text here. Click to load it


lange nicht, dass einen Parser mit Generator schreiben leicht ist.






Quoted text here. Click to load it

Quoted text here. Click to load it

Du kannst offenbar keine Standards lesen. Denn da steht ganz klar
zuerstmal: Annex A (informative) -- muss ich dir jetzt den Unterschied



to be an aid to comprehension. It is not an exact statement of the
language."

Quoted text here. Click to load it


genau das habe ich geschrieben, keine ausdefinierte Grammatik).

Quoted text here. Click to load it





Puh, naja, das ist jetzt Aussage gegen Aussage. Du findest das Schreiben



Quoted text here. Click to load it




Das ist wohl richtig, eine ordentliche Grammatik zu schreiben ist auch

elendige Arbeit.




Quoted text here. Click to load it

Einen Tod muss man sterben. Vermutlich ist dann wohl ausschlaggebend,
womit man am meisten Erfahrung hat.


Johannes

--  

selben Hardware." -- Hans-Peter Diettrich in d.s.e.

Re: State Machine Compiler für 8-bit AVRs?
Am 24.09.2019 um 20:47 schrieb Johannes Bauer:
Quoted text here. Click to load it


Quoted text here. Click to load it

Quoted text here. Click to load it


Quoted text here. Click to load it


yacc ist nicht einfach. Wer gackert muss auch legen.





Quoted text here. Click to load it

Quoted text here. Click to load it






Quoted text here. Click to load it

Das ist die Zusammenfassung der Fragmente. Nicht normativ, weil die
normativen Teile nebst der semantischen Bedingungen in den anderen
Kapiteln stehen, und weil dir niemand zusichert, in dem Anhang nichts
vergessen zu haben.

Quoted text here. Click to load it

Quoted text here. Click to load it





Analyse" nicht sauber trennt. Jedem Praktiker ist das egal. Regeln wie
"maximum munch" (also dass 'inti' ein Wort ist und nicht das gleiche wie
'int i') werden quasi immer in Prosa angegeben, nicht in der Grammatik.


  Stefan

Site Timeline