Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18

Discussione: [C] Creare un parser

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Quote Originariamente inviata da lordalbert Visualizza il messaggio
    Sto provando a buttare giù una bozza in flex. Per ora però ho un piccolo problema: Nel file di output che devo ottenere, gli output vengono definiti all'inizio, mentre nel file che do in ingresso allo scanner, gli output sono o in mezzo al file o comunque in fondo.

    Quindi, una volta che io dal file di origine ho letto la stringa

    codice:
    8 output gate arity 1 table [ 0 1 ] inputs [ 7 ]


    è "tardi" per copiare la relativa stringa nel nuovo file che devo creare, perchè in tal file la definizione degli output avviene prima della definizione dei gate (con relativa tabella di verità).
    Dovrei "tornare in dietro", ma credo non si possa proprio.

    Probabilmente una via possibile è fare due (o più) passate. Però... come faccio a spostare una riga, dal fondo del file, mettendola alla riga n°3?
    Sbagli approccio: prima crea una struttura dati in memoria, poi scrivi nel nuovo formato a partire da quella..
    In questo modo nel caso tu dovessi implementare nuovi linguaggi in output basterebbe cambiare l'ultimo step
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    366
    si in effetti sembra essere l'approccio migliore!

    Comunque ora sto provando a scriverlo partendo da 0 in C, senza flex. E' praticamente il mio primo programma "serio" (senza contare gli esercizietti didattici, che ho comunque fatto anni fa) che creo, e lo uso anche a fini didattici. La prima metà l'ho già fatta e funziona perfettamente!

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Non dovrebbe essere complicato dato che è line-based e senza blocchi di codice...
    E dato che ogni tipo di riga si riconosce dalla seconda parola separata da spazi!
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    366
    No, non è complicato. Devo solo ragionarci un po' su, ma è normale!

    Ho riscontrato ora un piccolo problema. Sicuramente c'è una funzione che risolve il mio problema, però non la conosco e se devo gestirla "alla grezza", non è il massimo....

    Dunque:

    supponiamo che io leggo una riga intera del file e la metto in una stringa (quindi array di caratteri). Supponiamo che questa stringa contenga soltanto un qualcosa del tipo:

    [ 8 6 ]

    io devo memorizzare in un array numerico i due valori. quindi dovrò ottenere input[0] = 8 e input[1] = 6.

    il tutto però è attualmente memorizzato in una stringa. quindi io leggo la cella di posizione 3 dell'array string e salvo il suo contenuto in input[0]. Cioè sarà input[0] = stringa[3]; (anche qua ci sarebbe il problema di conversione, perchè il numero lo vede come carattere... e quindi input[0] non lo vede come 8 ma come 56, che è il numero ascii del carattere '8'. Io per ora ho risolto facendo input[0] = stringa[3] - 48; Non so se magari esiste un sistema più elegante... )


    Fino a qua tutto ok.
    Il problema si presenta quando nella stringa mi ritrovo ad avere

    [ 10 7 ]

    cioè un numero di 2 (o più) cifre.
    Se facessi come prima, cioè input[0] = stringa[3] memorizzo soltanto l'1. se invece faccio input[0] = stringa[4] memorizzo solo lo 0. Io vorrei salvare il numero intero, in un unica cella del mio array di interi.


    Esiste un modo per fare ciò? Basterebbe una funzione che legga una singola stringa, cioè tutto ciò che è delimitato dagli spazi. E che possibilmente lo converta subito come intero, e non come carattere '10'

    Grazie mille!

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Puoi usare sscanf o strtok + atoi
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    366
    Figata! sscanf è proprio adatto a quello che devo fare io, e mi semplifica un sacco la vita!

    Praticamente devo cancellare un sacco di righe di codice, e sostituirle con un paio di sscanf... e dovrei impararmi un po' più di funzioni, per evitare di fare giri strani quando si possono evitare utilizzando semplici funzioni...

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    366
    Aggiornamento: Parser terminato qualche giorno fa. L'ho provato e funziona bene! Grazie per i consigli!

    PS: 1'060 righe di codice! :O E' vero che è ben commentato e ci sono molti controlli sull'apertura e corretta scrittura dei file/buffer, però... non pensavo fosse così corposo!

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Quote Originariamente inviata da lordalbert Visualizza il messaggio
    Aggiornamento: Parser terminato qualche giorno fa. L'ho provato e funziona bene! Grazie per i consigli!

    PS: 1'060 righe di codice! :O E' vero che è ben commentato e ci sono molti controlli sull'apertura e corretta scrittura dei file/buffer, però... non pensavo fosse così corposo!
    Con un po' di refactoring di sicuro puoi diminuire la lunghezza e migliorare la qualità del codice..
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.