Rekursiver Descent-Parser für C

8

Ich suche einen Parser für C. Hier ist was ich brauche:

  1. Geschrieben in C ( nicht C ++).
  2. Handgeschrieben (nicht generiert).
  3. BSD oder ähnlich permissive Lizenz.
  4. Kann sich selbst nicht-trivial analysieren (kann eine Teilmenge von C sein).

Es kann Teil eines Projekts sein, solange es entkoppelt ist, so dass ich den Parser herausziehen kann.

Gibt es einen vorhandenen Parser, der diese Anforderungen erfüllt?

    
Imagist 27.11.2009, 14:03
quelle

8 Antworten

7

Wenn Sie C99 nicht benötigen, dann ist lcc ein Slam Dunk:

  • Es ist in einem sehr klaren, gut geschriebenen Buch dokumentiert.
  • Techniken, die für das rekursive Absteigen von Operatoren mit Vorrang verwendet werden, sind in einem Artikel und technischen Bericht von Dave Hanson gut dokumentiert.
  • Klarer, handgeschriebener ANSI C-Code.

Ein möglicher Nachteil ist, dass der lcc Parser keinen abstrakten Syntaxbaum erstellt - er geht direkt vom Parsing zum Zwischencode.

Wenn Sie C99 haben müssen, dann denke ich, dass tinycc (tcc) die beste Wahl ist.

    
Norman Ramsey 27.11.2009 22:22
quelle
2

Wie wäre es mit Sparse ?

    
blwy10 27.11.2009 15:17
quelle
1

Sie könnten TCC ausprobieren. Es ist lizenziert unter der Lesser GPL.

    
themis 27.11.2009 18:09
quelle
0

Es scheint, dass nwcc ausreichend mit Ihren Anforderungen übereinstimmt.

    
lazyden 28.11.2009 15:06
quelle
0

Ein guter c-Compiler ist an diesem Ort vorhanden. Einfach und zugänglich. Ссылка

    
Deepan Prabhu Babu 11.07.2015 21:56
quelle
-1

GCC hat eine in gcc / c-parser.c.

    
Grandpa 27.11.2009 14:08
quelle
-1

Überprüfen Sie elsa, es verwendet den verallgemeinerten LR-Algorithmus.

Seine Hauptverwendung ist für C ++, aber es analysiert auch C-Code.

Überprüfen Sie auf der Seite im Abschnitt "Wie viel C kann Elsa analysieren?" was besagt, dass es die meisten C-Programme analysieren kann, einschließlich des Linux-Kernels.

Es ist unter einer BSD-Lizenz veröffentlicht.

    
Asrail 27.11.2009 15:18
quelle
-1

Hier ist ein rekursiver Descent-Parser, den ich nach C portiert habe: Ссылка

    
Gabriel Anzziani 02.12.2010 04:54
quelle

Tags und Links