AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Kconfig-Syntax: Wir parse ich sowas?
Thema durchsuchen
Ansicht
Themen-Optionen

Kconfig-Syntax: Wir parse ich sowas?

Ein Thema von Valle · begonnen am 17. Aug 2008 · letzter Beitrag vom 26. Okt 2008
Antwort Antwort
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#1

Kconfig-Syntax: Wir parse ich sowas?

  Alt 17. Aug 2008, 19:38
Hi DPler!

Normal habe ich selten Probleme, was den richtigen Ansatz für ein Programm angeht. Aber jetzt stehe ich gerade vor einem kleinen Problem. Dachte ich, ich frage einfach mal hier nach.

Und zwar muss ich für ein Projekt von mir einen bestimmten Syntax parsen. Das ganz soll in Python erledigt werden, aber das spielt eigentlich weniger die Rolle. Der Syntax wird in den sogenannten Kconfig-Dateien verwendet. Diese definieren ein hierarchisches Menü, in welchem Optionen für den Linux Kernel festgelegt werden. Definiert wird das Format in der im Kernel-Paket beiliegenden Datei "kconfig-language.txt", die ich hier für euch mal hochgeladen habe. Eine Datei sieht z.B. so aus, wie sie hier zu sehen ist.

Meine Frage ist jetzt: Wie stelle ich das am besten an? Ich habe schon öfters mal ein wenig geparst. Allerdings eher auf dem Niveau einer INI-Datei oder eben eine Quick-And-Dirty Lösung, welche nur ein paar wenige Informationen per Regular Expressions holt. Das hier ist jedoch schon ein paar Level höher.

Eine Bibliothek für genau diesen Syntax habe ich nicht gefunden. Kann mir auch nicht vorstellen, dass es sowas gibt. Jedoch könnte ich mir vorstellen, dass es Bibliotheken für Python gibt, die das Parsen einer solchen Datei einfacher macht. Ich habe kein Problem sowas zu nutzen, falls da jemand etwas kennt und mir empfehlen kann.

Hoffe auf eure Hilfe!

Mit freundlichen Grüßen,

Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#2

Re: Kconfig-Syntax: Wir parse ich sowas?

  Alt 18. Aug 2008, 02:10
vielleicht helfen dir ja die kernel-tools selber, welche auch im Quelltext vorliegen. soweit ich das bis jetzt analysiert habe liegen diese unter kernelroot/scripts/kconfig.ich vermute mal, dass die beiden binaries conf und mconf entscheidend dafür zuständig sind...
ich bin aber auf die Schnelle nicht durchgestiegen, wie das Parsing genau funktioniert.

HTH Frank
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#3

Re: Kconfig-Syntax: Wir parse ich sowas?

  Alt 18. Aug 2008, 12:07
Zitat von _frank_:
vielleicht helfen dir ja die kernel-tools selber, welche auch im Quelltext vorliegen. soweit ich das bis jetzt analysiert habe liegen diese unter kernelroot/scripts/kconfig.ich vermute mal, dass die beiden binaries conf und mconf entscheidend dafür zuständig sind...
ich bin aber auf die Schnelle nicht durchgestiegen, wie das Parsing genau funktioniert.

HTH Frank
Ich habe auch schon probiert, einfach mal die entsprechen Sourcen für das Parsing der KConfig Dateien anzuschauen, aber leider ist C nicht so wirklich meine Welt. Und vorallem: Was habe ich davon? Ich habe doch mit Python wesentlich mehr Möglichektein als mit C, da bringt mir das ja nicht viel wenn ich bei C was abgucke. Und eh ich da durchgestiegen bin, habe ich es auch selbst gemacht.

Ich dachte jetzt halt, dass hier einige Profis sind, die schon das Ein oder Andere geparst haben und damit Erfahrung haben, wie man das am besten angeht. So stelle ich mir i.M. auch noch die Frage, ob ich das ganze in OOP realisieren sollte und wenn ja, wie das dann aufgebaut werden sollte. Ich habe eigentlich keine Lust einfach wild drauf Los zu programmieren um nach einigen Stunden Arbeit zu merken, dass mein Ansatz Mist ist und ich anschließend wieder von Vorne beginnen darf.

Trotzdem Danke, Frank.
Hoffe es finden sich noch ein paar Tipps.

Mit freundlichen Grüßen,

Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#4

Re: Kconfig-Syntax: Wir parse ich sowas?

  Alt 19. Aug 2008, 13:43
Ich schiebe den Thread hier mal gaaanz vorsichtig ein Stück nach oben,
in der stillen Hoffnung noch ein paar Tipps zu bekommen.



Mit freundlichen Grüßen,

Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#5

Re: Kconfig-Syntax: Wir parse ich sowas?

  Alt 20. Aug 2008, 13:47
Einmal probier ich's noch, danach fange ich wohl mal an.
Ihr müsst mehr parsen, Leute!

Mit freundlichen Grüßen,

Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Kconfig-Syntax: Wir parse ich sowas?

  Alt 20. Aug 2008, 14:08
Hallo Valentin,

wenn du merkst, dass sich niemand auf dein Thema einlassen möchte, dann ist es eine gute Strategie, wenn du dein Problem etwas stückelst. Nicht zuletzt hilft es dir selbst, wenn du dein Problem analysierst und in überschaubaren Häppchen präsentierst. Wer weiß, vielleicht findet sich ja dann doch wer, der zumindest bei einem Teilproblem etwas beitragen möchte.

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#7

Re: Kconfig-Syntax: Wir parse ich sowas?

  Alt 26. Okt 2008, 15:19
Hi DP!

Ich habe eben mal etwas weiter gemacht. Ich hatte schon einige Wochen vorher einen Ansatz, der mir das ganze in mehrdimensionale Arrays packt. Jetzt wollte ich eben diese Arrays verwerten und mal ein Schritt weiterkommen. Naja, denkste...

Wie sich eben herausgestellt hat, läuft das Programm noch gar nicht so gut wie ich dachte. Irgendwie fehlt die Verschachtelung der Arrays (Das ist alles ein großes, 2-dimensionales Array obwohl es normalerweise mindestens 5-dimensional sein müsste), und auch einige Elemente der Datei werden einfach (mir völlig unerklärlich) falsch geparst. Das war wohl genau das, was ich mit der Haudrauf-Methode erwartet habe. Und durch meinen total schlechten Code steige ich jetzt, einige Wochen später, auch selbst nicht mehr durch.

Hat nicht vielleicht doch jemand eine Idee? Ich habe von sogenannten "Lexern" (z.B. Flex) gelesen, die zumindest für ähnliche Aufgaben zuständig sein sollen. Ist das vielleicht das richtige? Warum finde ich in den Kernel-Sourcen selbst nichts richtiges dazu?

Mit freundlichen Grüßen,

Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Kconfig-Syntax: Wir parse ich sowas?

  Alt 26. Okt 2008, 15:29
Da man gar nicht weiss, was Du bisher versucht hast, ist es auch nicht einfach, Dir zu helfen. Du solltest 'einfach drauflos' hacken, sonst lernst Du nix. Was bringt es Dir, seit bald 2 Monaten an so einem lächlichen Parser herum zu überlegen, anstatt einfach mal anzufangen.

Ein Parser besteht eigentlich immer aus einem Tokenizer, der einem Parser die Symbole Stück-für-Stück liefert. Woraus, d.h. aus welchen 'Symbolen' besteht die Sprache? Wie sieht denn die Syntax aus, also die BNF (Backus-Naur-Form)?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#9

Re: Kconfig-Syntax: Wir parse ich sowas?

  Alt 26. Okt 2008, 15:42
Hi alzaimer!

Wie ich oben geschrieben habe, habe ich bereits angefangen. Allerdings denke ich, ist dieser Ansatz eigentlich so gut wie nichts wert. Da das ganze doch etwas viel Code wäre, bei dem sowieso keiner durchblickt (mich einschließlich ) schreibe ich hier mal, was das Ding bisher tut.

Also es handelt sich um eine einfache Klasse. Bei der Initialisierung lädt diese Klasse eine angegebene Datei in den Speicher. Diese Datei wird dann erstmal in einzelne Zeilen zerlegt (Nach \n in ein Array aufgeteilt). Bei der "parse()"-Methode geht das Programm dann jede einzelne Zeile durch. Es schaut, um welches Keyword es sich in dieser Zeile handelt und (sollte zumindest) dann je nach Keyword entsprechend weitermachen.

Im ersten Post habe ich zwei Links geschrieben, in denen die Struktur solcher Programme beschrieben ist. Ich poste jetzt hier einfach mal ein paar Zeilen, damit man eine Vorstellung davon hat.

Code:
menuconfig NETDEV_1000
   bool "Ethernet (1000 Mbit)"
   depends on !UML
   default y
   ---help---
     Ethernet (also called IEEE 802.3 or ISO 8802-2) is the most common
     type of Local Area Network (LAN) in universities and companies.

     Say Y here to get to see options for Gigabit Ethernet drivers.
     This option alone does not add any kernel code.
     Note that drivers supporting both 100 and 1000 MBit may be listed
     under "Ethernet (10 or 100MBit)" instead.

     If you say N, all options in this submenu will be skipped and disabled.

if NETDEV_1000

config ACENIC
   tristate "Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support"
   depends on PCI
   ---help---
     Say Y here if you have an Alteon AceNIC, 3Com 3C985(B), NetGear
     GA620, SGI Gigabit or Farallon PN9000-SX PCI Gigabit Ethernet
     adapter. The driver allows for using the Jumbo Frame option (9000
     bytes/frame) however it requires that your switches can handle this
     as well. To enable Jumbo Frames, add `mtu 9000' to your ifconfig
     line.

     To compile this driver as a module, choose M here: the
     module will be called acenic.

config ACENIC_OMIT_TIGON_I
   bool "Omit support for old Tigon I based AceNICs"
   depends on ACENIC
   help
     Say Y here if you only have Tigon II based AceNICs and want to leave
     out support for the older Tigon I based cards which are no longer
     being sold (ie. the original Alteon AceNIC and 3Com 3C985 (non B
     version)). This will reduce the size of the driver object by
     app. 100KB. If you are not sure whether your card is a Tigon I or a
     Tigon II, say N here.

     The safe and default value for this is N.
Auszug aus linux-2.6.26.2/drivers/net/Kconfig

Ich bin jetzt eben der Meinung, dass es in dieser Weise keinen Sinn hat. Da muss was anderes her. Ich habe ja (wie bereits geschrieben) mal was von diesen Tokenizern / Lexern und wie sie alle heißen gelesen, aber irgendwie fehlen mit da gute Dokumentationen und Beispiele für. Und außerdem weiß ich selbst noch nicht recht, ob das überhaupt das richtige ist.

Eigentlich will ich jetzt gar keine konkrete Hilfe. Ich hoffe vielmehr darauf, einige allgemeinen Tipps zu bekommen. Bestimmte Ansätze / Bibliotheken etc. Gegen was konkretes bzgl. Kconfig-Syntax habe ich natürlich auch nichts einzuwenden. Aber ich denke meinen momentanen Code kann man so nicht benutzen...

Mit freundlichen Grüßen,

Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#10

Re: Kconfig-Syntax: Wir parse ich sowas?

  Alt 26. Okt 2008, 16:11
das ganze mit arrays zu machen halte ich persönlich für ziemlich ungünstig. ich würde sowas in form von Token-Klassen und Tokenlisten-Klassen aufbauen.Dabei kann prinzipell jedes token eine Liste enthalten.
somit kannst du ohne probleme eine endlose baumstruktur aufbauen,ohne dir über die Tiefe Gedanken zu machen.
ansonsten musst du halt analysieren, wo eine unterstruktur im Quellcode beginnt und wo endet, wann es ein Token mit Liste (menuconfig) ist, oder nur ein Property (bool). Dies könnte man durch ein Flag realisieren und/oder eine abstrakte Methode zum auslesen der evtl. vorhandenen Unterstruktur.

HTH Frank
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz