byacc - Online nel cloud

Questo è il comando byacc che può essere eseguito nel provider di hosting gratuito OnWorks utilizzando una delle nostre molteplici postazioni di lavoro online gratuite come Ubuntu Online, Fedora Online, emulatore online Windows o emulatore online MAC OS

PROGRAMMA:

NOME


Yacc-an LALR(1) generatore di parser

SINOSSI


sì, sì [ -BdgilLPrtvVy ] [ -b prefisso_file ] [ -o file di uscita ] [ -p simbolo_prefisso ] Nome del file

DESCRIZIONE


Yacc legge le specifiche grammaticali nel file Nome del file e genera an LALR(1) analizzatore
per questo. I parser sono costituiti da un insieme di LALR(1) analisi di tabelle e routine del driver
scritto nel linguaggio di programmazione C. Yacc normalmente scrive le tabelle di analisi e il
routine del driver nel file y.tab.c.

Sono disponibili le seguenti opzioni:

-b prefisso_file
. -b opzione cambia il prefisso anteposto ai nomi dei file di output nella stringa
denotato da prefisso_file. Il prefisso predefinito è il carattere y.

-B creare un parser di backtracking (configurazione del tipo di compilazione per btyacc).

-d . -d opzione causa il file di intestazione y.tab.h essere scritto. Contiene #define's
per gli identificatori di token.

-g . -g opzione provoca una descrizione grafica del generato LALR(1) parser per essere
scritto nel file y.punto in formato graphviz, pronto per essere elaborato da punto(1).

-i . -i opzione causa un file di intestazione supplementare y.tab.i essere scritto. Contiene
dichiarazioni extern e #define supplementari necessari per mappare il convenzionale
sì, sì yy-nomi prefissi a qualunque sia il -p l'opzione può specificare. Il file di codice, ad es.
y.tab.c è modificato per #include questo file così come il y.tab.h file, applicazione
uso coerente dei simboli definiti in quei file.

Il file di intestazione supplementare rende più semplice separare la compilazione di lex- e
yacc-file.

-l Se l' -l l'opzione non è specificata, sì, sì inserirà #linea direttive nel generato
codice. Il #linea le direttive consentono al compilatore C di mettere in relazione gli errori nel codice generato a
il codice originale dell'utente. Se la -l l'opzione è specificata, sì, sì non inserirà il
#linea direttive. #linea le direttive specificate dall'utente verranno mantenute.

-L abilitare l'elaborazione della posizione, ad esempio "%locations" (configurazione del tipo di compilazione per
btyacc).

-o file di uscita
specificare il nome file per il file del parser. Se questa opzione non viene data, l'output
nomefile è il prefisso del file concatenato con il suffisso del file, ad es. y.tab.c. Questo
sovrascrive il -b opzione.

-p simbolo_prefisso
. -p opzione cambia il prefisso anteposto ai simboli generati da yacc alla stringa
denotato da simbolo_prefisso. Il prefisso predefinito è la stringa YY.

-P creare un parser rientrante, ad esempio "%pure-parser".

-r . -r cause di opzione sì, sì per produrre file separati per codice e tabelle. Il codice
il file si chiama y.codice.c, e il file delle tabelle si chiama y.tab.c. Il prefisso “y." può essere
sovrascritto usando il -b opzione.

-s sopprimere”#define" dichiarazioni generate per letterali stringa in un "%gettone" dichiarazione,
per corrispondere più da vicino all'originale sì, sì comportamento.

Normalmente quando sì, sì vede una linea come

%token OP_ADD "AGGIUNGI"

nota che il citato "ADD" è un identificatore C valido e genera un #define not
solo per OP_ADD, ma anche per ADD, ad es.

#definisci OP_AGGIUNGI 257
#define AGGIUNGI 258

L'originale sì, sì non genera il secondo”#define”. Il -s l'opzione sopprime
questo "#define".

POSIX (IEEE 1003.1 2004) documenta solo nomi e numeri per “%gettone", anche se
i sì, sì e bison accettano anche stringhe letterali.

-t . -t opzione cambia le direttive del preprocessore generate da sì, sì in modo che il debug
le istruzioni saranno incorporate nel codice compilato.

-v . -v opzione fa sì che una descrizione leggibile dall'uomo del parser generato sia
scritto nel file y.uscita.

-V stampa il numero di versione sullo standard output.

-y sì, sì ignora questa opzione, supportata da bison per un'apparente compatibilità POSIX.

ESTENSIONI


sì, sì fornisce alcune estensioni per la compatibilità con bison e altre implementazioni di
yacc. Il %distruttore e %luoghi le funzioni sono disponibili solo se sì, sì è stata
configurato e compilato per supportare il back-tracking (btyacc) funzionalità. Il
le restanti funzionalità sono sempre disponibili:

%distruttore { codice } simbolo+
definisce il codice che viene invocato quando un simbolo viene scartato automaticamente durante l'errore
recupero. Questo codice può essere utilizzato per recuperare la memoria allocata dinamicamente associata
con il valore semantico corrispondente per i casi in cui le azioni dell'utente non possono essere gestite
la memoria in modo esplicito.

In caso di errore di analisi, il parser generato scarta i simboli nello stack
e input token fino a raggiungere uno stato che consentirà l'analisi di continuare.
Questo approccio di ripristino degli errori provoca una perdita di memoria se il YYSTYPE il valore è, o
contiene, puntatori alla memoria allocata dinamicamente.

Le parentesi codice viene invocato ogni volta che il parser scarta uno dei simboli.
Nel quadro di codice, "$$" o "$ $” designa il valore semantico associato al
simbolo scartato e "@$” designa la sua posizione (vedi %luoghi direttiva).

Un distruttore per simbolo è definito elencando un simbolo grammaticale in simbolo+. un per-
il distruttore di tipo è definito elencando un tag di tipo semantico (ad esempio, " ") in
simbolo+; in questo caso, il parser invocherà codice ogni volta che scarta qualsiasi grammatica
simbolo che ha quel tag di tipo semantico, a meno che quel simbolo non abbia il suo per-simbolo
distruttore.

Sono supportate due categorie di distruttori predefiniti che vengono invocati quando si scarta
qualsiasi simbolo grammaticale che non ha per-simbolo e nessun distruttore per tipo:

· il codice per “<*>” è usato per i simboli grammaticali che hanno un dichiarare esplicitamente
tag di tipo semantico (tramite "%tipo");

· il codice per “<>” è usato per simboli grammaticali che non hanno semantica dichiarata
tipo di etichetta.

%aspettarsi numero
dice sì, sì il numero previsto di conflitti tra turni/riduzione. Questo lo rende solo
segnalare il numero se è diverso.

%aspettati-rr numero
dire sì, sì il numero previsto di conflitti di riduzione/riduzione. Questo lo rende solo
segnalare il numero se è diverso. Questo è (a differenza del bisonte) consentito nei parser LALR.

%luoghi
dice sì, sì per consentire la gestione delle informazioni sulla posizione associate a ciascuna
token, fornito dal lexer nella variabile globale aylloc, simile alla gestione
di informazioni di valore semantico fornite in yylval.

Per quanto riguarda i valori semantici, le posizioni possono essere referenziate all'interno delle azioni usando @$ a
fare riferimento alla posizione del simbolo sul lato sinistro e @N (N un numero intero) a cui fare riferimento
alla posizione di uno dei simboli sul lato destro. Anche per quanto riguarda i valori semantici,
quando viene soddisfatta una regola, viene utilizzata un'azione predefinita per calcolare la posizione
rappresentato da @$ come l'inizio del primo simbolo e la fine dell'ultimo
simbolo nella parte destra della regola. Questo calcolo predefinito può essere
sovrascritto dall'assegnazione esplicita a @$ in un'azione regola.

Il tipo di aylloc is TIPO YYL, che è definito per impostazione predefinita come:

typedef struttura YYLTYPE {
int prima_riga;
int prima_colonna;
int ultima_riga;
int ultima_colonna;
} TIPO YYL;

TIPO YYL può essere ridefinito dall'utente (YYLTYPE_IS_DEFINED deve essere definito, a
inibire l'impostazione predefinita) nella sezione delle dichiarazioni del file delle specifiche. Come in
bisonte, il macro YYLLOC_DEFAULT viene invocato ogni volta che viene abbinata una regola per calcolare
una posizione per il lato sinistro della regola, prima che l'azione associata sia
eseguito; questa macro può essere ridefinita dall'utente.

Questa direttiva aggiunge a TIPO YYL parametro yerror(). Se il %parser puro
direttiva è presente, a TIPO YYL il parametro viene aggiunto a yilex() chiamate.

%lex-param { argomento-dichiarazione }
Per impostazione predefinita, il lexer non accetta parametri, ad es. yilex(). Usa questa direttiva per
aggiungi le dichiarazioni dei parametri per il tuo lexer personalizzato.

%parse-param { argomento-dichiarazione }
Per impostazione predefinita, il parser non accetta parametri, ad es. yyparse(). Usa questa direttiva
per aggiungere dichiarazioni di parametri per il parser personalizzato.

%parser puro
La maggior parte delle variabili (diverse da yydebug e yynerr) sono allocati in pila all'interno
parse, rendendo il parser ragionevolmente rientrante.

%tabella di gettoni
Rendi disponibili i nomi del parser per i token nel yytnome Vettore. Però, sì, sì
non predefinisce "$end", "$error" o "$undefined" in questo array.

PORTABILITÀ


Secondo Robert Corbett,

Berkeley Yacc è un LALR(1) generatore di parser. Berkeley Yacc è stato realizzato
il più compatibile possibile con AT&T Yacc. Berkeley Yacc può accettare qualsiasi input
specifica conforme alla documentazione AT&T Yacc. Specifiche
che sfruttano le funzionalità non documentate di AT&T Yacc sarà probabilmente
respinto.

La logica in

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/yacc.html

documenta alcune funzionalità di AT&T yacc che non sono più necessarie per la conformità POSIX.

Detto questo, potresti essere interessato a riutilizzare i file di grammatica con qualche altra implementazione
che non è strettamente compatibile con AT&T yacc. Ad esempio, c'è il bisonte. ecco
alcune differenze:

· Yacc accetta un segno di uguale che precede la parentesi graffa sinistra di un'azione (come nel
file di grammatica originale ftp.a):

| CRLF STAT
= {
statcmd();
}

· Yacc e bison emettono codice in ordine diverso, e in particolare bison fa avanti
riferimento a funzioni comuni come yylex, yyparse e yyerror senza fornire
prototipi.

· Il supporto di Bison per “%expect” è interrotto in più di una versione. Per i migliori risultati
usando bison, cancella quella direttiva.

· Bison non ha equivalenti per alcuni di sì, sìle opzioni della riga di comando, basandosi su
direttive incorporate nel file di grammatica.

· Bisonte “-y"L'opzione non influisce sulla mancanza di supporto da parte di bison per le funzionalità di AT&T yacc
che erano ritenuti obsoleti.

DIAGNOSTICA


Se ci sono regole che non vengono mai ridotte, il numero di tali regole è riportato su
errore standard. Se ce ne sono LALR(1) conflitti, viene riportato il numero di conflitti
sull'errore standard.

Usa byacc online utilizzando i servizi onworks.net



Gli ultimi programmi online per Linux e Windows