EnglezăFrancezăSpaniolă

Favicon OnWorks

lexposix - Online în cloud

Rulați lexposix în furnizorul de găzduire gratuit OnWorks prin Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

Aceasta este comanda lexposix care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

PROGRAM:

NUME


lex — generează programe pentru sarcini lexicale (DEZVOLTARE)

REZUMAT


Lex [−t] [−n|−v] [fişier...]

DESCRIERE


Lex utilitarul va genera programe C pentru a fi utilizate în procesarea lexicală a caracterelor
intrare și care poate fi folosit ca interfață pentru yacc. Se vor genera programele C
din Lex cod sursă și conform standardului ISO C, fără a depinde de niciunul
comportament nedefinit, nespecificat sau definit de implementare, cu excepția cazurilor în care codul
este copiat direct din sursa furnizată sau în cazurile care sunt documentate de către
implementare. De obicei, cel Lex utilitarul va scrie programul pe care îl generează în fișier
lex.yy.c; starea acestui fișier este nespecificată dacă Lex ieșiri cu o stare de ieșire diferită de zero.
Consultați secțiunea DESCRIERE EXTINSĂ pentru o descriere completă a Lex Limba de introducere.

OPŢIUNI


Lex utilitatea trebuie să se conformeze volumului Definiții de bază din POSIX.1-2008, Secțiune
12.2, Utilitate Sintaxă Instrucțiuni, cu excepția Ghidului 9.

Următoarele opțiuni vor fi acceptate:

−n Suprimați rezumatul statisticilor scrise de obicei cu −v opțiune. Daca nu
dimensiunile tabelului sunt specificate în Lex codul sursă și −v opțiunea nu este
specificat, atunci −n este implicit.

−t Scrieți programul rezultat în ieșirea standard în loc de lex.yy.c.

−v Scrieți un rezumat al Lex statistici la ieșirea standard. (Vezi discuția despre
Lex dimensiunile mesei în Definiții in Lex.) Dacă −t este specificată opțiunea și −n is
nespecificat, acest raport va fi scris cu o eroare standard. Dacă dimensiunile mesei
sunt specificate în Lex codul sursă, iar dacă −n nu este specificată opțiunea
−v opțiunea poate fi activată.

OPERANDE


Următorul operand va fi suportat:

fişier O cale a unui fișier de intrare. Dacă mai mult de unul astfel fişier este specificat, toate fișierele
vor fi concatenate pentru a produce un singur Lex program. Daca nu fişier operanzii sunt
specificat, sau dacă a fişier operandul este '-', se va utiliza intrarea standard.

Stdin


Intrarea standard va fi utilizată dacă nu fişier operanzii sunt specificați sau dacă a fişier operand
is '-'. Consultați FIȘIERE DE INTRARE.

INTRARE DOSARE


Fișierele de intrare vor fi fișiere text care conțin Lex codul sursă, așa cum este descris în
secțiunea DESCRIERE EXTINSĂ.

MEDIUL VARIABILE


Următoarele variabile de mediu vor afecta execuția Lex:

LIMBA Furnizați o valoare implicită pentru variabilele de internaționalizare care sunt nesetate sau
nul. (A se vedea volumul Definiții de bază din POSIX.1‐2008, Secțiune 8.2,
Internaționalizare Variabile pentru prioritatea internaţionalizării
variabile utilizate pentru a determina valorile categoriilor locale.)

LC_ALL Dacă este setată la o valoare șir nevid, suprascrieți valorile tuturor celorlalte
variabile de internaţionalizare.

LC_COLLATE
Determinați locația pentru comportamentul intervalelor, claselor de echivalență și multi-
caractere care colecționează elemente în cadrul expresiilor regulate. Dacă această variabilă nu este
setată la localitatea POSIX, rezultatele sunt nespecificate.

LC_CTYPE Determinați locația pentru interpretarea secvențelor de octeți de date text
ca caractere (de exemplu, caractere pe un singur octet, spre deosebire de caractere pe mai mulți octeți în
argumente și fișiere de intrare) și comportamentul claselor de caractere în cadrul obișnuit
expresii. Dacă această variabilă nu este setată la localitatea POSIX, rezultatele sunt
nespecificat.

LC_MESSAGES
Determinați locația care ar trebui utilizată pentru a afecta formatul și conținutul
mesaje de diagnostic scrise la eroare standard.

NLSPATH Determinați locația cataloagelor de mesaje pentru procesarea LC_MESSAGES.

ASINCRON EVENIMENTE


Implicit.

Stdout


În cazul în care −t este specificată opțiunea, fișierul text al codului sursă C Lex ar trebui sa fie
scris la ieșire standard.

În cazul în care −t opțiunea nu este specificată:

* Mesaje informative, de eroare și de avertizare definite de implementare cu privire la
conținutul Lex codul sursă de intrare va fi scris fie la ieșirea standard, fie
eroare standard.

* Dacă −v este specificată opțiunea și −n opțiunea nu este specificată, Lex statisticile trebuie
de asemenea, să fie scris fie la ieșirea standard, fie la eroare standard, într-o implementare-
format definit. Aceste statistici pot fi generate și dacă sunt specificate dimensiunile tabelului
cu '%' operator în Definiții secțiunea, atâta timp cât −n opțiunea nu este
specificat.

Stderr


În cazul în care −t este specificată opțiunea, informațională, eroare și avertisment definită de implementare
mesaje referitoare la conținutul Lex codul sursă de intrare va fi scris la standard
eroare.

În cazul în care −t opțiunea nu este specificată:

1. Mesaje informative, de eroare și de avertizare definite de implementare referitoare la
conținutul Lex codul sursă de intrare va fi scris fie la ieșirea standard, fie
eroare standard.

2. Dacă −v este specificată opțiunea și −n opțiunea nu este specificată, Lex statisticile trebuie
de asemenea, să fie scris fie la ieșirea standard, fie la eroare standard, într-o implementare-
format definit. Aceste statistici pot fi generate și dacă sunt specificate dimensiunile tabelului
cu '%' operator în Definiții secțiunea, atâta timp cât −n opțiunea nu este
specificat.

REZULTATE DOSARE


Se va scrie un fișier text care conține codul sursă C lex.yy.c, sau la standard
ieșire dacă −t opțiunea este prezentă.

EXTENDED DESCRIERE


Fiecare fișier de intrare trebuie să conțină Lex codul sursă, care este un tabel de expresii regulate
cu acțiuni corespunzătoare sub formă de fragmente de program C.

Cand lex.yy.c este compilat și legat cu Lex biblioteca (folosind −l l operand cu
c99), programul rezultat va citi caracterele introduse din intrarea standard și va
partiționați-l în șiruri care se potrivesc cu expresiile date.

Când se potrivește o expresie, vor avea loc următoarele acțiuni:

* Șirul de intrare care a fost potrivit va fi lăsat în yytext ca șir terminat nul;
yytext va fi fie o matrice de caractere externă, fie un pointer către un șir de caractere.
Așa cum se explică în Definiții in Lex, tipul poate fi selectat explicit folosind
%array or %pointer declarații, dar implicit este definit de implementare.

* Externul int yyleng va fi setat la lungimea șirului de potrivire.

* Fragmentul de program corespunzător expresiei, sau acțiunea, va fi executat.

În timpul potrivirii modelului, Lex va căuta în setul de modele cel mai lung
posibilă potrivire. Printre regulile care se potrivesc cu același număr de caractere, regula este dată mai întâi
va fi ales.

Formatul general al Lex sursa va fi:

Definiții %% Reguli %% UtilizatorSubrutine

Prima „%%” este necesar să marcheze începutul regulilor (expresii regulate și
acțiuni); al doilea „%%” este necesar numai dacă urmează subrutinele utilizatorului.

Orice linie din Definiții secțiune care începe cu a se presupune că este un C
fragment de program și va fi copiat în zona de definire externă a lex.yy.c fișier.
În mod similar, orice în Definiții secţiune inclusă între liniile de delimitare care conţin
„%{” si „%}” va fi, de asemenea, copiat neschimbat în zona de definire externă a
lex.yy.c fișier.

Orice astfel de intrare (începând cu a sau în interior „%{” si „%}” linii de delimitare)
apărând la începutul Reguli secțiunea înainte de specificarea oricăror reguli va fi
scris lex.yy.c după declaraţiile de variabile pentru yylex() funcția și
înainte de prima linie de cod în yylex(). Astfel, variabilele utilizatorului local yylex() poate fi
declarat aici, precum și codul aplicației de executat la intrarea în yylex,

Acțiunea întreprinsă de Lex când întâlniți orice intrare care începe cu a sau în interior
„%{” si „%}” linii de delimitare care apar în Reguli secțiune dar care vine după una sau mai multe
regulile sunt nedefinite. Prezența unei astfel de intrări poate duce la o definiție eronată a
il yylex() funcția.

Codul în limbajul C din intrare nu trebuie să conțină trigrafii în limbajul C. Codul limbajului C
în „%{” si „%}” liniile de delimitare nu trebuie să conțină nicio linie constând numai din „%}”,
sau numai de „%%”.

Definiții in Lex
Definiții apar înaintea primei „%%” delimitator. Orice rând din această secțiune nu este inclus
între „%{” si „%}” linii și nu începând cu a se presupune că definește a
Lex șir de substituție. Formatul acestor linii va fi:

nume substitui

În cazul în care o nume nu îndeplinește cerințele pentru identificatori din standardul ISO C, rezultat
este nedefinit. Șirul substitui va înlocui șirul {nume} când este folosit într-un
regulă. The nume șirul va fi recunoscut în acest context numai atunci când bretele sunt
furnizat și când nu apare între paranteze sau între ghilimele duble.

În Definiții secțiune, orice linie care începe cu a ('%') caracter şi
urmat de un cuvânt alfanumeric care începe cu oricare 's' or „S” va defini un set de
condiții de pornire. Orice rând care începe cu a '%' urmat de un cuvânt care începe cu oricare
'X' or 'X' definește un set de condiții exclusive de pornire. Când scanerul generat este
într-un %s stare, modelele fără stare specificată vor fi de asemenea active; într-o %x stat, așa
modelele nu trebuie să fie active. Restul rândului, după primul cuvânt, va fi
considerate a fi una sau mai multe -nume separate ale condițiilor de start. Stare de pornire
numele vor fi construite în același mod ca numele definiției. Condițiile de început pot fi
folosit pentru a restricționa potrivirea expresiilor regulate la una sau mai multe stări, așa cum este descris în
Regulat Expresii in Lex.

Implementările acceptă oricare dintre următoarele două declarații care se exclud reciproc
în Definiții secțiune:

%array Declarați tipul de yytext să fie o matrice de caractere terminată cu nul.

%pointer Declarați tipul de yytext să fie un pointer către un caracter terminat cu nul
șir.

Tipul implicit de yytext este definit de implementare. Dacă o aplicație se referă la yytext
în afara fișierului sursă al scanerului (adică prin intermediul unui extern), cererea va include
corespunzătoare %array or %pointer declarație în fișierul sursă al scanerului.

Implementările vor accepta declarații în Definiții sectiune pentru setarea anumitor
dimensiunile interioare ale mesei. Declarațiile sunt prezentate în tabelul următor.

Masa: Tabel Mărimea declaraţii in Lex

┌────────────┬──────────────────────────────────── ┬───────────────┐
DeclarațieDescriereMinim Valoare
├────────────┼──────────────────────────────────── ┼───────────────┤
│%p n │ Număr de posturi │ 2500 │
│%n n │ Număr de stări │ 500 │
│%a n │ Număr de tranziții │ 2000 │
│%e n │ Numărul de noduri ale arborelui de analiză │ 1000 │
│%k n │ Număr de clase de caractere împachetate │ 1000 │
│%o n │ Dimensiunea matricei de ieșire │ 3000 │
└────────────┴──────────────────────────────────── ┴───────────────┘
In masa, n reprezintă un număr întreg zecimal pozitiv, precedat de unul sau mai multe
personaje. Sensul exact al acestor numere de dimensiune a tabelului este definit de implementare. The
implementarea va documenta modul în care aceste numere afectează Lex utilitate și cum sunt acestea
legate de orice rezultat care poate fi generat de implementare în cazul în care există limitări
intalnite in timpul executiei de Lex. Din aceasta se poate determina
ieșiți care dintre valorile dimensiunii tabelului trebuie modificate pentru a permite Lex a cu succes
generați tabele pentru limba de intrare. Valorile din coloana Valoare minimă reprezintă
valorile cele mai mici trebuie să furnizeze implementările conforme.

Reguli in Lex
Regulile în Lex fișierele sursă sunt un tabel în care coloana din stânga conține regulate
expresii și coloana din dreapta conține acțiuni (fragmente de program C) care urmează să fie executate
când expresiile sunt recunoscute.

TIMP acțiune
TIMP acțiune
...

Porțiunea de expresie regulată extinsă (ERE) a unui rând va fi separată de acțiune by
una sau mai multe personaje. O expresie regulată care conține personajele trebuie
să fie recunoscut în una dintre următoarele condiții:

* Întreaga expresie apare între ghilimele duble.

* Cel caracterele apar între ghilimele duble sau paranteze pătrate.

* Fiecare este precedat de a caracter.

Utilizator Subrutine in Lex
Orice lucru din secțiunea subrutine de utilizator va fi copiat în lex.yy.c următor yylex,

Regulat Expresii in Lex
Lex utilitarul va suporta setul de expresii regulate extinse (vezi Base
Volumul definițiilor POSIX.1‐2008, Secțiune 9.4, Extins Regulat Expresii), cu
următoarele completări și excepții de la sintaxă:

„...” Orice șir cuprins între ghilimele duble va reprezenta caracterele din
ghilimele duble ca ele însele, cu excepția faptului că - evadări (care apar în
următorul tabel) vor fi recunoscute. Orice -secvența de evacuare trebuie
fi reziliat de oferta de închidere. De exemplu, „\01” „1” reprezintă un singur
șir: valoarea octală 1 urmată de caracter "1".

<de stat>r,stare1,stare2,...>r
Expresia regulată r se potrivesc numai atunci când programul se află într-unul dintre
condiţiile de pornire indicate de de stat, state1, si asa mai departe; vedea Acţiuni in Lex. (La fel de
o excepţie de la convenţiile tipografice din restul acestui volum de
POSIX.1‐2008, în spețăde stat> nu reprezintă o metavariabilă, ci
caractere unghiulare literale care înconjoară un simbol.) Condiția de pornire
va fi recunoscut ca atare numai la începutul unei expresii regulate.

r/x Expresia regulată r se potrivesc numai dacă este urmat de un
apariția expresiei regulate x (x este exemplul contextului final,
definite mai jos). Jetonul s-a întors yytext se potrivesc doar r. Dacă
porțiune de urmă a r se potrivește cu începutul de x, rezultatul este nespecificat. The
r expresia nu poate include un context ulterior ulterior sau „$” (finalul meciului-
linie) operator; x nu poate include '^' operator (potrivire-început-de-linie), nici
contextul final, nici cel „$” operator. Adică, o singură apariție a trailing-ului
contextul este permis în a Lex expresia regulată și '^' numai operatorul poate fi
folosit la începutul unei astfel de expresii.

{nume} Cand nume este unul dintre simbolurile de substituție din Definiții secțiune,
șir, inclusiv bretelele care le înconjoară, se înlocuiesc cu substitui
valoare. substitui valoarea va fi tratată în expresia regulată extinsă
de parcă ar fi cuprins între paranteze. Nu va avea loc nicio înlocuire dacă {nume}
apare într-o expresie paranteză sau între ghilimele duble.

În cadrul unui ERE, a caracterul va fi considerat a începe o secvență de evadare ca
specificate în tabelul din volumul Definiții de bază din POSIX.1‐2008, Capitol 5, Fișier
Format Notaţie ('\\', '\A', „\b”, „\f”, '\n', „\r”, '\t', „\v”). În plus, evadarea
secvențele din tabelul următor trebuie recunoscute.

Un literal nu poate apărea în cadrul unui ERE; secvența de evadare '\n' pot fi utilizate pentru a
reprezintă a . A nu trebuie să fie egalat de un operator de perioadă.

Masa: Evadare secvenţele in Lex

┌─────────┬──────────────────────────┬──────────── ──────────────┐
Evadare │ │ │
SecvenţăDescriereSens
├─────────┼──────────────────────────┼──────────── ──────────────┤
│\cifre │ A personaj │ Personajul al cărui │
│ │ urmată de cea mai lungă │ codificare este reprezentată │
│ │ secvență de unu, doi sau │ de unul, doi sau │
│ │ trei cifre octale │ trei cifre octale │
│ │ caractere (01234567). │ număr întreg. Multi-octeți │
│ │ Dacă toate cifrele sunt │ caractere necesită │
│ │ 0 (adică │ multiplu, concatenat │
│ │ reprezentarea │ secvențelor de evadare ale acestui │
│ │ caracterul NUL), tipul │, inclusiv │
│ │ comportamentul este nedefinit. │ conducând pentru │
│ │ │ fiecare octet. │
├─────────┼──────────────────────────┼──────────── ──────────────┤
│\xcifre │ A personaj │ Personajul al cărui │
│ │ urmată de cea mai lungă │ codificare este reprezentată │
│ │ succesiune de hexazecimal- │ prin hexazecimal │
│ │ caractere cu cifre │ întreg. │
│ │ (01234567abcdefABCDEF). │ │
│ │ Dacă toate cifrele sunt │ │
│ │ 0 (adică │ │
│ │ reprezentarea │ │
│ │ caracterul NUL), │ │
│ │ comportamentul este nedefinit. │ │
├─────────┼──────────────────────────┼──────────── ──────────────┤
│\c │ A personaj │ Personajul 'c', │
│ │ urmat de orice │ neschimbat. │
│ │ caracter nedescris │ │
│ │ în acest tabel sau în │ │
│ │ tabel din Baza │ │
│ │ Definiții volum de │ │
│ │ POSIX.1‐2008, Capitol 5, │ │
│ │ Fișier Format Notaţie │ │
│ │ ('\\', '\A', „\b”, „\f”, │ │
│ │ '\n', „\r”, '\t', „\v”). │ │
└─────────┴──────────────────────────┴──────────── ──────────────┘
Notă: În cazul în care o '\X' secvența trebuie să fie urmată imediat de o cifră hexazecimală
caracter, o secvență precum "\x1""1" poate fi folosit, care reprezintă un caracter
conţinând valoarea 1, urmată de caracter "1".

Ordinea de prioritate acordată expresiilor regulate extinse pentru Lex diferă de asta
specificate în volumul Definiții de bază din POSIX.1‐2008, Secțiune 9.4, Extins Regulat
Expresii. Ordinea de prioritate pentru Lex va fi așa cum se arată în tabelul următor,
de la sus la jos.

Notă: Introducerea caracterelor escape nu este menită să implice că aceștia sunt operatori, dar
sunt incluse în tabel pentru a-și arăta relațiile cu adevăratul
operatori. Condiția de început, contextul final și notațiile de ancorare au
a fost omis din tabel din cauza restricțiilor de plasare descrise în
aceasta sectiune; pot apărea doar la începutul sau la sfârșitul unui ERE.

Masa: TIMP Precedenta in Lex

┌──────────────────────────────────┬────────────── ────────┐
Extins Regulat ExpresiePrecedenta
├──────────────────────────────────┼────────────── ────────┤
legate de colaţionare paranteză simboluri │ [= =] [: :] [. .] │
scăpat caractere │ \special caracter> │
paranteză expresie │ [ ] │
citând │ „...” │
grupare │ ( ) │
definiție │ {nume} │
un singur caracter RE dublare │ * + ? │
concatenare │ │
interval expresie │ {m,n} │
alternanţă │ | │
└──────────────────────────────────┴────────────── ────────┘
Operatorii de ancorare ERE '^' si „$” nu apar în tabel. Cu Lex regulat
expresii, acești operatori sunt restricționați în utilizarea lor: the '^' operator poate fi doar
folosit la începutul unei întregi expresii regulate și „$” operator numai la
Sfârșit. Operatorii se aplică întregii expresii regulate. Astfel, de exemplu, modelul
„(^abc)|(def$)” este nedefinit; poate fi scris în schimb ca două reguli separate, una cu
expresia regulată „^abc” si unul cu "def$", care au o acțiune comună prin intermediul
special '|' acțiune (vezi mai jos). Dacă modelul ar fi scris „^abc|def$”, s-ar potrivi
oricare "abc" or "def" pe o linie de la sine.

Spre deosebire de regulile generale ERE, ancorarea încorporată nu este permisă de majoritatea istoricilor Lex
implementari. Un exemplu de ancorare încorporată ar fi pentru modele precum
„(^| )foo( |$)" pentru a se potrivi "foo" când există ca cuvânt complet. Această funcționalitate poate
fi obținut folosind existente Lex Caracteristici:

^foo/[ \n] |
" prost"/[ \n] /* Găsite foo as a distinct cuvânt. */

Rețineți, de asemenea, că „$” este o formă de context final (este echivalent cu "/\n") și ca atare
nu poate fi folosit cu expresii regulate care conțin o altă instanță a operatorului (vezi
discuția anterioară despre contextul final).

Operatorul de context final al expresiilor regulate suplimentare „/” poate fi folosit ca un
caracter obișnuit dacă este prezentat între ghilimele duble, "/"; precedat de a ,
"\/"; sau într-o expresie paranteză, „[/]”. Condiția de pornire „<” si '>' Operatorii
va fi special numai într-o condiție de început la începutul unei expresii regulate;
în altă parte în expresia regulată, acestea vor fi tratate ca caractere obișnuite.

Acţiuni in Lex
Acțiunea care trebuie întreprinsă atunci când se potrivește un ERE poate fi un fragment de program C sau special
acțiunile descrise mai jos; fragmentul de program poate conține una sau mai multe instrucțiuni C și
poate include și acțiuni speciale. Instrucțiunea C goală ';' va fi o acțiune valabilă; orice
sfoară în lex.yy.c intrarea care se potrivește cu porțiunea de model a unei astfel de reguli este
ignorat sau ignorat efectiv. Cu toate acestea, absența unei acțiuni nu este valabilă și
actiunea Lex ia într-o astfel de condiție este nedefinit.

Specificațiile pentru o acțiune, inclusiv instrucțiunile C și acțiunile speciale, se pot extinde
pe mai multe linii, dacă sunt incluse între acolade:

TIMP <unu or mai mult goluri> { program declaraţie
program declaraţie }

Declarațiile programului nu trebuie să conțină jetoane de preprocesare neechilibrate.

Acțiunea implicită când un șir de caractere în intrarea în a lex.yy.c programul nu este potrivit de niciunul
expresia trebuie să fie copierea șirului la ieșire. Deoarece comportamentul implicit al unui
program generat de Lex este să citiți intrarea și să o copiați la ieșire, un minim Lex
program sursă care are doar „%%” va genera un program C care pur și simplu copiază intrarea
la ieșire neschimbată.

Vor fi disponibile patru acțiuni speciale:

| ECOU; RESPINGE; ÎNCEPE

| Actiunea '|' înseamnă că acțiunea pentru următoarea regulă este acțiunea pentru aceasta
regulă. Spre deosebire de celelalte trei acțiuni, '|' nu poate fi închis între bretele sau fi
-terminat; cererea trebuie să se asigure că este specificată singură,
fara alte actiuni.

ECOU; Scrieți conținutul șirului yytext pe ieșire.

RESPINGE; De obicei, doar o singură expresie este potrivită de un șir dat în intrare.
RESPINGE înseamnă ``continuați la următoarea expresie care se potrivește cu intrarea curentă'',
și va determina orice regulă a fost a doua alegere după regula actuală
executat pentru aceeași intrare. Astfel, mai multe reguli pot fi potrivite și executate
pentru un șir de intrare sau șiruri de intrare suprapuse. De exemplu, având în vedere
expresii obisnuite "xyz" si "X y" și intrarea "xyz", de obicei doar obișnuit
expresie "xyz" s-ar potrivi. Următoarea încercare de meci avea să înceapă după z. If
ultima acțiune în "xyz" regula este RESPINGE, atât această regulă, cât și "X y" pronunța
ar fi executat. The RESPINGE acţiunea poate fi implementată în aşa fel încât
fluxul de control nu continuă după el, ca și cum ar fi echivalent cu a goto
la o altă parte a yylex(). Utilizarea RESPINGE poate avea ca rezultat ceva mai mare și
scanere mai lente.

ÎNCEPE Actiunea:

ÎNCEPE newstate;

comută starea (condiția de pornire) la newstate. Dacă sfoara newstate are
nu a fost declarată anterior ca o condiție de pornire în Definiții secțiune,
rezultatele sunt nespecificate. Starea inițială este indicată de cifră "0" or
simbolul INIŢIALĂ.

Funcțiile sau macrocomenzile descrise mai jos sunt accesibile codului de utilizator inclus în Lex
intrare. Nu este specificat dacă apar în codul C de ieșire al Lex, sau sunt
accesibil numai prin intermediul −l l operand la c99 ( Lex bibliotecă).

int yylex(anula)
Efectuează analize lexicale pe intrare; aceasta este funcția primară generată de
il Lex utilitate. Funcția va returna zero când se ajunge la sfârșitul intrării;
în caz contrar, va returna valori diferite de zero (jetoane) determinate de acțiunile care
sunt selectate.

int şi mai mult(anula)
Când este apelat, indică faptul că atunci când următorul șir de intrare este recunoscut, va fi
adăugată la valoarea curentă a yytext mai degrabă decât înlocuirea acestuia; valoarea in
yyleng vor fi ajustate în consecință.

int yyless(int n)
păstrează n caracterele inițiale în yytext, terminat cu NUL și tratează restul
personaje de parcă nu ar fi fost citite; valoarea in yyleng vor fi ajustate
în consecinţă.

int intrare(anula)
Returnează următorul caracter de la intrare sau zero la sfârșitul fișierului. Se va obține
intrare de la indicatorul de flux yyin, deși posibil printr-un tampon intermediar.
Astfel, odată ce scanarea a început, efectul de modificare a valorii lui yyin is
nedefinit. Caracterul citit va fi eliminat din fluxul de intrare al scanerului
fără nicio prelucrare de către scaner.

int unput(int c)
Returnează caracterul 'c' la intrare; yytext si yyleng sunt nedefinite până la
următoarea expresie este potrivită. Rezultatul utilizării unput() pentru mai multe caractere decât
au fost introduse nu este specificat.

Următoarele funcții vor apărea numai în Lex bibliotecă accesibilă prin intermediul −l l
operand; prin urmare, acestea pot fi redefinite printr-o aplicație conformă:

int yywrap(anula)
Sunat de yylex() la finalul dosarului; implicit yywrap() returnează întotdeauna 1. Dacă
cererea necesită yylex() pentru a continua procesarea cu o altă sursă de intrare,
atunci aplicația poate include o funcție yywrap(), care asociază un alt fișier
cu variabila externă FILE * yyin și va returna o valoare zero.

int principal(int argc, car de război *argv[])
apeluri yylex() pentru a efectua analiza lexicală, apoi iese. Codul utilizatorului poate conține
principal() pentru a efectua operațiuni specifice aplicației, apelând yylex() după caz.

În afară de intrare, unput(), și principal(), toate numele externe și statice generate de Lex
va începe cu prefixul yy or YY.

EXIT STAREA


Următoarele valori de ieșire vor fi returnate:

0 Finalizare cu succes.

>0 A apărut o eroare.

CONSECINȚE OF ERORI


Implicit.

următor secțiuni sunt informativ.

APLICARE UTILIZARE


Aplicațiile conforme sunt avertizate că în Reguli secțiunea, un ERE fără acțiune este
nu este acceptabil, dar nu trebuie să fie detectat ca eronat de Lex. Acest lucru poate duce la
erori de compilare sau de rulare.

Scopul intrare() este de a elimina caractere din fluxul de intrare și de a le elimina cât mai departe
în ceea ce priveşte analiza lexicală. O utilizare comună este de a renunța la corpul unui comentariu
odată ce începutul unui comentariu este recunoscut.

Lex utilitatea nu este pe deplin internaționalizată în tratarea expresiilor regulate în
il Lex cod sursă sau analizor lexical generat. Ar părea de dorit să aibă
analizatorul lexical interpretează expresiile regulate date în Lex sursa conform
mediul specificat la executarea analizorului lexical, dar acest lucru nu este posibil
cu curentul Lex tehnologie. Mai mult, însăși natura analizatorilor lexicali
produsă de Lex trebuie să fie strâns legată de cerințele lexicale ale limbajului de intrare
fiind descris, care oricum este adesea specific localității. (De exemplu, scrierea unui
analizorul care este utilizat pentru textul francez nu este util automat pentru procesarea altora
limbi.)

EXEMPLE


Următorul este un exemplu de a Lex program care implementează un scaner rudimentar pentru a
Sintaxă asemănătoare Pascal:

%{
/* Nevoie acest pentru il apel la atof() de mai jos. */
#include
/* Nevoie acest pentru printf(), fopen(), si stdin de mai jos. */
#include
%}

CIFRE [0−9]
ID [a−z][a−z0−9]*

%%

{DIGIT}+ {
printf("Un număr întreg: %s (%d)\n", yytext,
atoi(yytext));
}

{DIGIT}+"."{DIGIT}* {
printf("A float: %s (%g)\n", yytext,
atof(yytext));
}

if|then|begin|end|procedure|function {
printf("Un cuvânt cheie: %s\n", yytext);
}

{ID} printf(„Un identificator: %s\n”, yytext);

"+"|"−"|"*"|"/" printf("Un operator: %s\n", yytext);

"{"[^}\n]*"}" /* Mănâncă comentarii pe un rând. */

[ \t\n]+ /* Consumați spațiu alb. */

. printf("Caractere nerecunoscut: %s\n", yytext);

%%

int main(int argc, char *argv[])
{
++argv, −−argc; /* Sari peste numele programului. */
dacă (argc > 0)
yyin = fopen(argv[0], "r");
altfel
yyin = stdin;

yylex();
}

FUNDAMENTARE


Chiar dacă −c opțiunea și referințele la limbajul C sunt păstrate în aceasta
Descriere, Lex poate fi generalizat la alte limbi, așa cum sa făcut la un moment dat pentru EFL,
limbajul FORTRAN extins. De când Lex specificația de intrare este în esență limbaj -
independent, versiunile acestui utilitar ar putea fi scrise pentru a produce Ada, Modula-2 sau Pascal
cod și există implementări istorice cunoscute care fac acest lucru.

Descrierea actuală a Lex ocolește problema abordării ERE internaționalizate
în Lex cod sursă sau analizor lexical generat. Dacă urmează modelul folosit de Wow
(se presupune că codul sursă este prezentat în localitatea POSIX, dar intrarea și ieșirea sunt
în localitatea specificată de variabilele de mediu), apoi tabelele în lexical
analizor produs de Lex ar interpreta ERE specificate în Lex sursă în ceea ce privește
variabilele de mediu specificate când Lex a fost executat. Efectul dorit ar fi acela de a avea
analizatorul lexical interpretează ERE-urile date în Lex sursa conform
mediu specificat când analizatorul lexical este executat, dar acest lucru nu este posibil cu
curentă Lex tehnologie.

Descrierea secvențelor de evadare cu cifre octale și hexazecimale este de acord cu ISO C
utilizarea standard a secvențelor de evacuare.

Versiunile anterioare ale acestui standard permiteau implementări cu alți octeți decât opt
biți, dar acest lucru a fost modificat în această versiune.

Nu există o specificație detaliată a formatului de ieșire. Comportamentul observat al Lex sub patru ani
diferite implementări istorice a fost că niciuna dintre aceste implementări în mod consecvent
a raportat numerele de linii pentru mesajele de eroare și avertisment. În plus, a existat o dorință
acea Lex să fie permis să emită mesaje de diagnosticare suplimentare. Lăsarea formatelor de mesaje
nespecificat evită aceste întrebări de formatare și probleme cu internaționalizarea.

Deși %x specificator pentru exclusiv condițiile de început nu este o practică istorică, ci este
considerată a fi o schimbare minoră a implementărilor istorice și îmbunătățește foarte mult
gradul de utilizare al Lex programe, deoarece permite unei aplicații să obțină cele așteptate
funcționalitate cu mai puține instrucțiuni.

%array si %pointer declaraţiile au fost adăugate ca un compromis între istoric
sisteme. Sistemul bazat pe V Lex copiează textul potrivit în a yytext matrice. The flex
programul, suportat în sistemele BSD și GNU, folosește un pointer. În acest din urmă caz, semnificativ
îmbunătățiri de performanță sunt disponibile pentru unele scanere. Majoritatea programelor istorice ar trebui
nu necesită nicio schimbare în portarea de la un sistem la altul deoarece șirul fiind
referit este terminat nul în ambele cazuri. (Metoda folosită de flex în cazul ei este să
null-termină jetonul în loc prin amintirea caracterului care obișnuia să vină corect
după token și înlocuirea acestuia înainte de a continua la următoarea scanare.) Multi-fișier
programe cu referințe externe la yytext în afara fișierului sursă al scanerului ar trebui
continuă să opereze pe sistemele lor istorice, dar ar avea nevoie de unul dintre cele noi
declaraţiile să fie considerate strict portabile.

Descrierea ERE evită duplicarea inutilă a detaliilor ERE, deoarece acestea
sensuri în cadrul a Lex ERE sunt aceleași cu cele pentru ERE din acest volum al POSIX.1‐2008.

Motivul pentru condiția nedefinită asociată cu textul care începe cu a sau
în „%{” si „%}” linii de delimitare care apar în Reguli secțiunea este istorică
practică. Atât BSD, cât și System V Lex copiați intrarea indentată (sau inclusă) în Reguli
secțiune (cu excepția începutului) către zonele inaccesibile ale yylex() funcția (codul
se scrie direct după a rupe afirmație). În unele cazuri, sistemul V Lex generează un
mesaj de eroare sau o eroare de sintaxă, în funcție de forma introducerii indentate.

Intenția de a împărți lista de funcții în cele care pot apărea în lex.yy.c
contra cele care apar doar în libl.a este că numai acele funcții în libl.a poate fi
redefinite în mod fiabil printr-o aplicație conformă.

Descrierile de ieșire standard și eroare standard sunt oarecum complicate deoarece
istoric Lex implementările au ales să emită mesaje de diagnosticare la ieșirea standard
(dacă nu −t a fost dat). POSIX.1‐2008 permite acest comportament, dar lasă o deschidere pentru
comportament mai așteptat de utilizare a erorii standard pentru diagnosticare. De asemenea, sistemul V
comportamentul de scriere a statisticilor atunci când sunt date orice dimensiuni de tabel este permis, în timp ce BSD-
sistemele derivate o pot evita. Programatorul poate obține întotdeauna exact ceea ce s-a dorit
rezultate prin utilizarea fie a −t or −n opțiuni.

Secțiunea OPERANDE nu menționează utilizarea - ca sinonim pentru intrare standard; nu
toate implementările istorice acceptă o astfel de utilizare pentru oricare dintre fişier operanzi.

O descriere a traducere tabel a fost șters din propunerile timpurii din cauza acesteia
utilizare relativ scăzută în aplicații istorice.

Modificarea definiției intrare() funcție care permite tamponarea intrării
prezintă oportunitatea unor câștiguri majore de performanță în unele aplicații.

Următoarele exemple clarifică diferențele dintre Lex expresii regulate și regulate
expresii care apar în altă parte în acest volum al POSIX.1‐2008. Pentru expresiile regulate ale
forma "r/x", șirul de potrivire r este întotdeauna returnat; poate apărea confuzie atunci când
începutul x se potrivește cu porțiunea de urmă a r. De exemplu, având în vedere obișnuit
expresie "a*b/cc" și intrarea "aaabcc", yytext ar conține șirul "aaab" pe aceasta
Meci. Dar dată fiind expresia regulată "x*/xy" și intrarea "xxxy", jetonul XXX, Nu
xx, este returnat de unele implementări deoarece XXX meciuri "X*".

În regulă „ab*/bc”, "b*" la sfârșitul r extinde rmeciul lui la începutul
contextul final, deci rezultatul este nespecificat. Dacă această regulă ar fi "ab/bc", Însă
regula se potrivește cu textul "ab" când este urmată de text "bc". În acest ultim caz,
potrivire a r nu se poate extinde până la începutul x, deci rezultatul este specificat.

VIITOR INSTRUCTIUNI


Nici unul.

Utilizați lexposix online folosind serviciile onworks.net


Servere și stații de lucru gratuite

Descărcați aplicații Windows și Linux

  • 1
    unitedrpms
    unitedrpms
    Alăturați-vă nouă în Gitter!
    https://gitter.im/unitedrpms-people/Lobby
    Activați depozitul URPMS din dvs
    sistem -
    https://github.com/UnitedRPMs/unitedrpms.github.io/bl...
    Descărcați unitedrpms
  • 2
    Boost bibliotecile C ++
    Boost bibliotecile C ++
    Boost oferă portabil gratuit
    biblioteci C++ revizuite de colegi. The
    se pune accent pe bibliotecile portabile care
    funcționează bine cu biblioteca standard C++.
    Vezi http://www.bo...
    Descărcați bibliotecile Boost C++
  • 3
    VirtualGL
    VirtualGL
    VirtualGL redirecționează comenzile 3D de la a
    Aplicația Unix/Linux OpenGL pe un
    GPU pe partea de server și convertește
    a redat imagini 3D într-un flux video
    cu care ...
    Descărcați VirtualGL
  • 4
    libusb
    libusb
    Bibliotecă pentru a activa spațiul utilizatorului
    programe de aplicație cu care să comunicați
    dispozitive USB. Public: Dezvoltatori, End
    Utilizatori/Desktop. Limbajul de programare: C.
    Categorii ...
    Descărcați libusb
  • 5
    ÎNGHIŢITURĂ
    ÎNGHIŢITURĂ
    SWIG este un instrument de dezvoltare software
    care conectează programele scrise în C și
    C++ cu o varietate de nivel înalt
    limbaje de programare. SWIG este folosit cu
    diferit...
    Descărcați SWIG
  • 6
    Tema WooCommerce Nextjs React
    Tema WooCommerce Nextjs React
    Tema React WooCommerce, construită cu
    Urmează JS, Webpack, Babel, Node și
    Express, folosind GraphQL și Apollo
    Client. Magazin WooCommerce în React(
    contine: Produse...
    Descărcați tema WooCommerce Nextjs React
  • Mai mult »

Comenzi Linux

Ad