EnglishFrenchSpanyol

Ad


Favicon OnWorks

yaccposix - Dalam Talian di Awan

Jalankan yaccposix dalam penyedia pengehosan percuma OnWorks melalui Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS

Ini ialah arahan yaccposix yang boleh dijalankan dalam penyedia pengehosan percuma OnWorks menggunakan salah satu daripada berbilang stesen kerja dalam talian percuma kami seperti Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS.

JADUAL:

NAMA


yacc — satu lagi pengkompil pengkompil (PEMBANGUNAN)

SINOPSIS


yacc [−dltv] [−b awalan_fail] [−p sym_prefix] tatabahasa

DESCRIPTION


. yacc utiliti hendaklah membaca perihalan tatabahasa tanpa konteks dalam tatabahasa dan tulis C
kod sumber, mematuhi piawaian ISO C, kepada fail kod, dan secara pilihan pengepala
maklumat ke dalam fail pengepala, dalam direktori semasa. Kod sumber yang dijana hendaklah
tidak bergantung pada mana-mana tingkah laku yang tidak ditentukan, tidak ditentukan, atau pelaksanaan yang ditentukan, kecuali dalam
kes di mana ia disalin terus daripada tatabahasa yang dibekalkan, atau dalam kes yang
didokumentasikan oleh pelaksanaan. Kod C hendaklah mentakrifkan fungsi dan rutin berkaitan
dan makro untuk automaton yang melaksanakan algoritma penghuraian yang memenuhi keperluan dalam
Algoritma.

Bentuk dan makna tatabahasa diterangkan dalam bahagian PENERANGAN LANJUTAN.

Kod sumber C dan fail pengepala hendaklah dihasilkan dalam bentuk yang sesuai sebagai input untuk C
penyusun (lihat c99).

PILIHAN


. yacc utiliti hendaklah mematuhi volum Definisi Asas POSIX.1‐2008, seksyen
12.2, utiliti Syntax Garis panduan, kecuali Garis Panduan 9.

Pilihan berikut hendaklah disokong:

−b awalan_fail
Penggunaan awalan_fail bukan y sebagai awalan untuk semua nama fail output. Kod itu
fail y.tab.c, fail pengepala y.tab.h (dicipta apabila −d ditentukan), dan
fail penerangan y.keluaran (dicipta apabila −v dinyatakan), hendaklah ditukar kepada
awalan_fail.tab.c, awalan_fail.tab.h, dan awalan_fail.pengeluaran, Masing-masing.

−d Tulis fail pengepala; secara lalai hanya fail kod yang ditulis. The #tentukan
kenyataan mengaitkan kod token yang diberikan oleh yacc dengan yang diisytiharkan pengguna
nama token. Ini membenarkan fail sumber selain daripada y.tab.c untuk mengakses token
kod.

−l Hasilkan fail kod yang tidak mengandungi sebarang #garisan membina. Jika pilihan ini
tidak hadir, ia tidak ditentukan sama ada fail kod atau fail pengepala mengandungi
#garisan arahan. Ini hanya boleh digunakan selepas tatabahasa dan yang berkaitan
tindakan dinyahpepijat sepenuhnya.

−p sym_prefix
Penggunaan sym_prefix bukan yy sebagai awalan untuk semua nama luar yang dihasilkan oleh
yacc. Nama yang terlibat hendaklah termasuk fungsi yyparse(), yylex(), dan
yyerror(), dan pembolehubah yylval, yychar, dan yydebug. (Dalam baki daripada
bahagian ini, enam simbol yang disebut dirujuk menggunakan nama lalainya
hanya sebagai kemudahan notasi.) Nama tempatan juga mungkin dipengaruhi oleh −p
pilihan; Walau bagaimanapun −p pilihan tidak akan menjejaskan #tentukan simbol yang dihasilkan oleh
yacc.

−t Ubah suai arahan kompilasi bersyarat untuk membenarkan kompilasi penyahpepijatan
kod dalam fail kod. Pernyataan penyahpepijatan masa jalan hendaklah sentiasa terkandung dalam
fail kod, tetapi secara lalai arahan penyusunan bersyarat menghalangnya
penyusunan.

−v Tulis fail yang mengandungi perihalan penghurai dan laporan konflik
dihasilkan oleh kekaburan dalam tatabahasa.

OPERAND


Operan berikut diperlukan:

tatabahasa Nama laluan bagi fail yang mengandungi arahan, selepas ini dipanggil tatabahasa, Bagi
yang mana penghurai hendak dibuat. Format untuk tatabahasa diterangkan dalam
Bahagian PENERANGAN LANJUTAN.

STDIN


Tidak digunakan.

INPUT FILES


Fail tatabahasa hendaklah menjadi fail teks yang diformatkan seperti yang dinyatakan dalam PENERANGAN LANJUTAN
bawah seksyen ini.

PERSEKITARAN PELBAGAI


Pembolehubah persekitaran berikut akan mempengaruhi pelaksanaan yacc:

BAHASA Sediakan nilai lalai untuk pembolehubah pengantarabangsaan yang tidak ditetapkan atau
null. (Lihat volum Takrif Asas POSIX.1‐2008, seksyen 8.2,
Pengantarabangsaan Pembolehubah untuk keutamaan pengantarabangsaan
pembolehubah yang digunakan untuk menentukan nilai kategori tempat.)

LC_ALL Jika ditetapkan kepada nilai rentetan bukan kosong, ganti nilai semua yang lain
pembolehubah pengantarabangsaan.

LC_CTYPE Tentukan tempat untuk tafsiran jujukan bait data teks
sebagai aksara (contohnya, bait tunggal berbanding dengan aksara berbilang bait dalam
argumen dan fail input).

LC_MESSAGES
Tentukan tempat yang harus digunakan untuk mempengaruhi format dan kandungan
mesej diagnostik yang ditulis kepada ralat standard.

NLSPATH Tentukan lokasi katalog mesej untuk pemprosesan LC_MESSAGES.

. BAHASA and LC_* pembolehubah mempengaruhi pelaksanaan yacc utiliti seperti yang dinyatakan. The utama()
fungsi yang ditakrifkan dalam Yacc Perpustakaan hendaklah memanggil:

setlocale(LC_ALL, "")

dan dengan itu program yang dihasilkan oleh yacc juga akan dipengaruhi oleh kandungan ini
pembolehubah pada masa jalan.

ASYNCRONOUS ACARA


Lalai.

STDOUT


Tidak digunakan.

STDERR


Jika anjakan/kurangkan atau kurangkan/kurangkan konflik dikesan dalam tatabahasa, yacc hendaklah menulis a
melaporkan konflik tersebut kepada ralat standard dalam format yang tidak ditentukan.

Ralat standard juga hendaklah digunakan untuk mesej diagnostik.

OUTPUT FILES


Fail kod, fail pengepala dan fail penerangan hendaklah fail teks. Semua adalah
diterangkan dalam bahagian berikut.

Kod File
Fail ini hendaklah mengandungi kod sumber C untuk yyparse() fungsi. Ia hendaklah mengandungi
kod untuk pelbagai tindakan semantik dengan penggantian makro dilakukan pada mereka sebagai
diterangkan dalam bahagian PENERANGAN LANJUTAN. Ia juga hendaklah mengandungi salinan #tentukan
pernyataan dalam fail pengepala. Sekiranya % kesatuan pengisytiharan digunakan, pengisytiharan untuk
YYSTYPE juga hendaklah disertakan dalam fail ini.

Header File
Fail pengepala hendaklah mengandungi #tentukan pernyataan yang mengaitkan nombor token dengan
nama token. Ini membenarkan fail sumber selain daripada fail kod untuk mengakses kod token.
Jika % kesatuan pengisytiharan digunakan, pengisytiharan untuk YYSTYPE dan an luar YYSTYPE yylval
pengisytiharan juga hendaklah disertakan dalam fail ini.

Penerangan Produk File
Fail perihalan hendaklah fail teks yang mengandungi perihalan mesin keadaan
sepadan dengan penghurai, menggunakan format yang tidak ditentukan. Had untuk jadual dalaman (lihat
Batas) hendaklah juga dilaporkan, dalam cara yang ditetapkan pelaksanaan. (Beberapa pelaksanaan
boleh menggunakan teknik peruntukan dinamik dan tidak mempunyai nilai had khusus untuk dilaporkan.)

EXTENDED DESCRIPTION


. yacc arahan menerima bahasa yang digunakan untuk mentakrifkan tatabahasa bagi bahasa sasaran
untuk dihuraikan oleh jadual dan kod yang dihasilkan oleh yacc. Bahasa yang diterima oleh yacc sebagai
tatabahasa untuk bahasa sasaran diterangkan di bawah menggunakan yacc bahasa input itu sendiri.

Masukan tatabahasa termasuk peraturan yang menerangkan struktur input bahasa sasaran dan
kod yang akan digunakan apabila peraturan ini diiktiraf untuk menyediakan semantik yang berkaitan
tindakan. Kod yang akan dilaksanakan hendaklah muncul sebagai badan teks yang bertujuan untuk menjadi C-
kod bahasa. Badan teks ini tidak boleh mengandungi trigraf bahasa C. Bahasa C
kemasukan dianggap membentuk fungsi yang betul apabila diproses oleh yacc ke dalam keluarannya
fail. Kod yang disertakan dengan cara ini hendaklah dilaksanakan semasa pengiktirafan
Bahasa sasaran.

Memandangkan tatabahasa, yang yacc utiliti menjana fail yang diterangkan dalam FAIL OUTPUT
bahagian. Fail kod boleh disusun dan dipautkan menggunakan c99. Jika pengisytiharan dan
bahagian program fail tatabahasa tidak termasuk definisi utama(), yylex(), dan
yyerror(), output yang disusun memerlukan pautan dengan versi yang dibekalkan secara luaran
fungsi. Versi lalai bagi utama() dan yyerror() dibekalkan dalam yacc perpustakaan dan
boleh dipautkan dengan menggunakan −l y operan kepada c99. Yang yacc antara muka perpustakaan tidak perlu
menyokong antara muka dengan selain daripada lalai yy awalan simbol. Aplikasi ini menyediakan
fungsi penganalisis leksikal, yylex(); yang lex utiliti direka khusus untuk
menjana rutin sedemikian.

Input Bahasa
Permohonan hendaklah memastikan bahawa setiap fail spesifikasi mengandungi tiga bahagian dalam
Perintah: pengisytiharan, tatabahasa peraturan, dan program, dipisahkan dengan dua kali ganda
watak ("%%"). Bahagian pengisytiharan dan program boleh kosong. Jika yang terakhir adalah
kosong, yang sebelumnya "%%" tanda yang memisahkannya daripada bahagian peraturan boleh ditinggalkan.

Input ialah teks bentuk bebas mengikut struktur tatabahasa yang ditakrifkan di bawah.

Leksikal struktur of yang Tatabahasa
The , , dan watak hendaklah diabaikan, kecuali bahawa
permohonan hendaklah memastikan bahawa ia tidak terdapat dalam nama atau berbilang aksara yang dikhaskan
simbol. Komen hendaklah disertakan bersama "/* ... */", dan boleh muncul di mana-mana nama berada
sah.

Nama adalah panjang sewenang-wenangnya, terdiri daripada huruf, noktah ('.'), garis bawah ('_'), Dan
digit bukan permulaan. Huruf besar dan huruf kecil adalah berbeza. Menepati aplikasi
tidak boleh menggunakan nama bermula pada yy or YY sejak yacc parser menggunakan nama sedemikian. banyak daripada
nama-nama muncul dalam keluaran akhir yacc, dan dengan itu mereka harus dipilih untuk mematuhi
dengan sebarang peraturan tambahan yang dicipta oleh pengkompil C untuk digunakan. Khususnya mereka muncul
in #tentukan Penyataan.

Satu literal hendaklah terdiri daripada satu aksara yang disertakan dalam aksara satu petikan. Semuanya
urutan pelarian yang disokong untuk pemalar aksara oleh standard ISO C hendaklah
disokong oleh yacc.

Hubungan dengan penganalisis leksikal dibincangkan secara terperinci di bawah.

Permohonan hendaklah memastikan bahawa aksara NUL tidak digunakan dalam peraturan tatabahasa atau
literal.

Deklarasi seksyen
Bahagian pengisytiharan digunakan untuk menentukan simbol yang digunakan untuk menentukan bahasa sasaran
dan hubungan mereka antara satu sama lain. Khususnya, kebanyakan maklumat tambahan
diperlukan untuk menyelesaikan kekaburan dalam tatabahasa bebas konteks untuk bahasa sasaran ialah
disediakan di sini.

Kebiasaan yacc memberikan hubungan antara nama simbolik yang dijananya dan mereka
nilai angka asas. Bahagian pengisytiharan memungkinkan untuk mengawal
penugasan nilai-nilai ini.

Anda juga boleh menyimpan maklumat semantik yang dikaitkan dengan token yang sedang aktif
timbunan parse dalam bahasa C yang ditentukan pengguna kesatuan, jika ahli kesatuan adalah
dikaitkan dengan pelbagai nama dalam tatabahasa. Bahagian pengisytiharan memperuntukkan
ini juga.

Kumpulan pertama pengisytihar di bawah semuanya mengambil senarai nama sebagai hujah. Senarai itu boleh
pilihan hendaklah didahului dengan nama ahli kesatuan C (dipanggil a tag di bawah) muncul
dalam '' ' and '>'. (Sebagai pengecualian kepada konvensyen tipografi selebihnya ini
volum POSIX.1‐2008, dalam kes initag> tidak mewakili pembolehubah, tetapi
aksara kurungan sudut literal yang mengelilingi simbol.) Penggunaan tag menyatakan bahawa
token yang dinamakan pada baris ini hendaklah daripada jenis C yang sama seperti ahli kesatuan yang dirujuk oleh
tag. Ini dibincangkan dengan lebih terperinci di bawah.

Untuk senarai yang digunakan untuk menentukan token, penampilan pertama token yang diberikan boleh diikuti dengan
integer positif (sebagai rentetan digit perpuluhan). Jika ini dilakukan, nilai asas
yang diberikan kepadanya untuk tujuan leksikal hendaklah dianggap sebagai nombor itu.

Yang berikut mengisytiharkan nama menjadi tanda:

%token [<tag>] nama [nombor] [nama [nombor]]...

If tag ada, jenis C untuk semua token pada baris ini hendaklah diisytiharkan sebagai jenis
dirujuk oleh tag. Jika integer positif, nombor, mengikuti a nama, nilai itu hendaklah
diberikan kepada token.

Yang berikut mengisytiharkan nama menjadi token, dan memberikan keutamaan kepadanya:

%dibiarkan [<tag>] nama [nombor] [nama [nombor]]...
%betul [<tag>] nama [nombor] [nama [nombor]]...

Satu atau lebih baris, setiap satu bermula dengan salah satu simbol ini, boleh muncul dalam bahagian ini.
Semua token pada baris yang sama mempunyai tahap keutamaan dan persekutuan yang sama; garisan
adalah mengikut urutan peningkatan keutamaan atau kekuatan mengikat. %dibiarkan menandakan bahawa
pengendali pada talian itu dibiarkan bersekutu, dan %betul sama menandakan betul
pengendali bersekutu. Jika tag hadir, ia hendaklah mengisytiharkan jenis C untuk namas seperti yang diterangkan
Untuk %token.

Yang berikut mengisytiharkan nama menjadi token, dan menunjukkan bahawa ini tidak boleh digunakan
secara berpersatuan:

%nonassoc [<tag>] nama [nombor] [nama [nombor]]...

Jika penghurai menemui penggunaan bersekutu token ini, ia melaporkan ralat. Jika tag is
hadir, ia hendaklah mengisytiharkan jenis C untuk namas seperti yang diterangkan untuk %token.

Yang berikut mengisytiharkan bahawa ahli kesatuan namas adalah bukan terminal, dan oleh itu ia diperlukan
untuk mempunyai tag medan pada permulaannya:

%jenis <tag> nama...

Kerana ia berurusan dengan bukan terminal sahaja, memberikan nombor token atau menggunakan literal adalah
juga dilarang. Jika konstruk ini ada, yacc hendaklah melakukan pemeriksaan jenis; jika ini
binaan tidak hadir, timbunan parse hendaklah memegang hanya int jenis.

Setiap nama yang digunakan dalam tatabahasa tidak ditakrifkan oleh a %token, %dibiarkan, %betul, Atau %nonassoc
pengisytiharan diandaikan mewakili simbol bukan terminal. The yacc utiliti hendaklah melaporkan
ralat untuk sebarang simbol bukan terminal yang tidak muncul di sebelah kiri sekurang-kurangnya satu
peraturan tatabahasa.

Sebaik sahaja jenis, keutamaan, atau nombor token nama ditentukan, ia tidak boleh
berubah. Jika pengisytiharan pertama token tidak memberikan nombor token, yacc hendaklah
berikan nombor token. Setelah tugasan ini dibuat, nombor token tidak boleh ditukar
dengan tugasan yang jelas.

Pengisytihar berikut tidak mengikut corak sebelumnya.

Yang berikut mengisytiharkan bukan terminal nama untuk menjadi permulaan lambang, yang mewakili
terbesar, struktur paling umum yang diterangkan oleh peraturan tatabahasa:

%mula nama

Secara lalai, ia adalah sebelah kiri peraturan tatabahasa pertama; lalai ini boleh
ditindih dengan pengisytiharan ini.

Berikut mengisytiharkan yacc timbunan nilai menjadi gabungan pelbagai jenis nilai
dikehendaki.

% kesatuan { badan of kesatuan (in C)}

Badan kesatuan tidak boleh mengandungi token prapemproses pendakap kerinting yang tidak seimbang.

Secara lalai, nilai yang dikembalikan melalui tindakan (lihat di bawah) dan penganalisis leksikal hendaklah
jenis int. Yang yacc utiliti menjejaki jenis, dan ia hendaklah memasukkan yang sepadan
nama ahli kesatuan untuk melaksanakan pemeriksaan jenis ketat bagi penghurai yang terhasil.

Sebagai alternatif, memandangkan sekurang-kurangnya satutag> konstruk digunakan, kesatuan boleh diisytiharkan
dalam fail pengepala (yang hendaklah disertakan dalam bahagian pengisytiharan dengan menggunakan a #include
membina dalam %{ and %}), dan a mesin taip digunakan untuk mentakrifkan simbol YYSTYPE untuk diwakili
kesatuan ini. Kesan daripada % kesatuan adalah untuk memberikan pengisytiharan YYSTYPE terus daripada
yang yacc input.

Pengisytiharan dan definisi bahasa C boleh muncul dalam bahagian pengisytiharan, disertakan
dengan markah berikut:

%{ ... %}

Kenyataan ini hendaklah disalin ke dalam fail kod, dan mempunyai skop global di dalamnya
bahawa ia boleh digunakan dalam bahagian peraturan dan program. Kenyataan tidak boleh mengandungi
"%}" di luar ulasan, rentetan literal atau pemalar berbilang aksara.

Permohonan hendaklah memastikan bahagian pengisytiharan ditamatkan oleh token %%.

Tatabahasa peraturan in yacc
Bahagian peraturan mentakrifkan tatabahasa bebas konteks untuk diterima oleh fungsi yacc
menjana dan mengaitkan dengan peraturan tersebut tindakan bahasa C dan keutamaan tambahan
maklumat. Tatabahasa diterangkan di bawah, dan definisi formal berikut.

Bahagian peraturan terdiri daripada satu atau lebih peraturan tatabahasa. Peraturan tatabahasa mempunyai bentuk:

A : BADAN ;

Simbol A mewakili nama bukan terminal, dan BADAN mewakili urutan sifar atau
lebih namas, literal, dan semantik tindakans yang kemudiannya boleh diikuti dengan pilihan
didahulukan memerintahs. Hanya nama dan literal mengambil bahagian dalam pembentukan
tatabahasa; tindakan semantik dan peraturan keutamaan digunakan dengan cara lain. The dan
yang adalah yacc tanda baca. Jika terdapat beberapa peraturan tatabahasa berturut-turut dengan
sebelah kiri yang sama, iaitu ('|') boleh digunakan untuk mengelak daripada menulis semula
sebelah kiri; dalam kes ini muncul hanya selepas peraturan terakhir. Badan
bahagian boleh kosong (atau kosong daripada nama dan literal) untuk menunjukkan bahawa bukan terminal
simbol sepadan dengan rentetan kosong.

. yacc utiliti memberikan nombor unik kepada setiap peraturan. Peraturan menggunakan bar menegak
notasi adalah peraturan yang berbeza. Nombor yang diberikan kepada peraturan muncul dalam perihalan
fail.

Unsur-unsur yang terdiri daripada BADAN ialah:

nama, literal
Ini membentuk peraturan tatabahasa: nama sama ada a token atau bukan terminal;
literal berdiri untuk dirinya sendiri (kurang tanda petikan yang diperlukan secara leksikal).

semantik tindakan
Dengan setiap peraturan tatabahasa, pengguna boleh mengaitkan tindakan untuk dilakukan setiap kali
peraturan itu diiktiraf dalam proses input. (Perhatikan bahawa perkataan ``tindakan'' boleh
juga merujuk kepada tindakan penghurai—anjakan, kurangkan dan seterusnya.)

Tindakan ini boleh mengembalikan nilai dan boleh mendapatkan nilai yang dikembalikan oleh sebelumnya
tindakan. Nilai ini disimpan dalam objek jenis YYSTYPE (lihat % kesatuan). The
nilai hasil tindakan hendaklah disimpan pada timbunan parse dengan sebelah kiri
sebelah peraturan, untuk diakses oleh pengurangan lain sebagai sebahagian daripada tangan kanan mereka
sebelah. Dengan menggunakantag> maklumat yang disediakan dalam bahagian pengisytiharan, bahagian
kod yang dihasilkan oleh yacc boleh ditaip dengan ketat dan mengandungi sewenang-wenangnya
maklumat. Di samping itu, penganalisis leksikal boleh menyediakan jenis yang sama
nilai untuk token, jika dikehendaki.

Tindakan ialah pernyataan C sewenang-wenangnya dan oleh itu boleh melakukan input atau output, panggilan
subprogram, dan mengubah pembolehubah luaran. Tindakan ialah satu atau lebih pernyataan C
disertakan dalam kurungan kerinting '{' and '}'. Kenyataan tidak boleh mengandungi
token prapemprosesan pendakap kerinting yang tidak seimbang.

Pembolehubah pseudo tertentu boleh digunakan dalam tindakan. Ini adalah makro untuk akses
kepada struktur data yang diketahui secara dalaman yacc.

$$ Nilai tindakan boleh ditetapkan dengan memberikannya kepada $$. Jika taip
semakan didayakan dan jenis nilai yang akan diberikan tidak boleh
ditentukan, mesej diagnostik boleh dihasilkan.

$nombor Ini merujuk kepada nilai yang dikembalikan oleh komponen yang ditentukan oleh
token nombor di sebelah kanan peraturan, membaca dari kiri ke kanan;
nombor boleh menjadi sifar atau negatif. Jika nombor adalah sifar atau negatif, ia
merujuk kepada data yang dikaitkan dengan nama pada timbunan parser
mendahului simbol paling kiri peraturan semasa. (Itu dia, "$0"
merujuk kepada nama serta-merta mendahului nama paling kiri dalam
peraturan semasa boleh didapati pada timbunan parser dan "$−1" kepada
simbol kepada yang kiri.) Jika nombor merujuk kepada unsur melepasi arus
titik dalam peraturan, atau di luar bahagian bawah timbunan, hasilnya ialah
tidak ditentukan. Jika pemeriksaan jenis didayakan dan jenis nilai yang akan
yang ditetapkan tidak dapat ditentukan, mesej diagnostik mungkin dihasilkan.

$<tag>nombor
Ini sepadan dengan tepat dengan simbol yang sepadan tanpa tag
kemasukan, tetapi benarkan pemeriksaan jenis yang ketat (dan halang yang tidak diingini
jenis penukaran). Kesannya ialah makro dikembangkan untuk digunakan tag
untuk memilih elemen daripada kesatuan YYSTYPE (menggunakan nama data.tag).
Ini amat berguna jika nombor tidak positif.

$<tag>$ Ini mengenakan rujukan kepada jenis ahli kesatuan yang dirujuk
by tag. Pembinaan ini terpakai apabila rujukan ke kiri
nilai konteks berlaku dalam tatabahasa, dan menyediakan yacc dengan cara
untuk memilih jenis.

Tindakan boleh berlaku di mana-mana dalam peraturan (bukan hanya pada penghujung); sesuatu tindakan boleh diakses
nilai yang dikembalikan oleh tindakan di sebelah kirinya, dan seterusnya nilai yang dikembalikannya boleh
diakses dengan tindakan di sebelah kanannya. Tindakan yang muncul di tengah-tengah peraturan
hendaklah sama dengan menggantikan tindakan dengan simbol bukan terminal baharu dan
menambah peraturan kosong dengan simbol bukan terminal di sebelah kiri. The
tindakan semantik yang dikaitkan dengan peraturan baharu hendaklah setara dengan yang asal
tindakan. Penggunaan tindakan dalam peraturan mungkin menimbulkan konflik yang tidak
sebaliknya wujud.

Secara lalai, nilai peraturan hendaklah menjadi nilai elemen pertama di dalamnya.
Jika elemen pertama tidak mempunyai jenis (terutamanya dalam kes a
literal) dan pemeriksaan jenis dihidupkan oleh %jenis, mesej ralat akan terhasil.

didahulukan
Kata kunci %prec boleh digunakan untuk menukar tahap keutamaan yang berkaitan dengan a
peraturan tatabahasa tertentu. Contoh ini adalah dalam kes di mana unari dan binari
operator mempunyai perwakilan simbolik yang sama, tetapi perlu diberikan berbeza
keutamaan, atau di mana pengendalian pembinaan if-else yang tidak jelas
perlu. Simbol terpelihara %prec boleh muncul serta-merta selepas badan
peraturan tatabahasa dan boleh diikuti dengan nama token atau literal. Ia hendaklah
menyebabkan keutamaan peraturan tatabahasa menjadi token berikut
nama atau literal. Tindakan untuk peraturan secara keseluruhan boleh diikuti %prec.

Jika bahagian program mengikuti, aplikasi hendaklah memastikan bahawa peraturan tatabahasa adalah
ditamatkan oleh %%.

Program seksyen
. program bahagian boleh merangkumi definisi penganalisis leksikal yylex(), dan mana-mana
fungsi lain; contohnya, yang digunakan dalam tindakan yang dinyatakan dalam peraturan tatabahasa. Ia
tidak ditentukan sama ada bahagian program mendahului atau mengikuti tindakan semantik dalam
fail keluaran; oleh itu, jika aplikasi mengandungi sebarang definisi makro dan
pengisytiharan yang bertujuan untuk digunakan pada kod dalam tindakan semantik, ia akan meletakkannya
dalam "%{ ... %}" dalam bahagian pengisytiharan.

Input Tatabahasa
Input berikut untuk yacc menghasilkan penghurai untuk input kepada yacc. Sintaks formal ini
diutamakan daripada huraian sintaks teks sebelumnya.

Struktur leksikal ditakrifkan dengan kurang tepat; Leksikal struktur of yang Tatabahasa mentakrifkan
kebanyakan istilah. Surat-menyurat antara terma sebelumnya dan token di bawah adalah sebagai
ikut.

PENGENALAN Ini sepadan dengan konsep nama, diberikan sebelum ini. Ia juga termasuk
literal seperti yang ditakrifkan sebelum ini.

C_IDENTIFIER
Ini adalah nama, dan sebagai tambahan ia diketahui diikuti oleh a . A
literal tidak boleh menghasilkan token ini.

NOMBOR Rentetan digit (integer perpuluhan bukan negatif).

JENIS, KIRI, MARK, LCURL, RCURL
Ini sepadan secara langsung dengan %jenis, %dibiarkan, %%, %{, dan %}.

{ ... } Ini menunjukkan kod sumber bahasa C, dengan kemungkinan kemasukan '$'
makro seperti yang dibincangkan sebelum ini.

/* Tatabahasa Untuk yang input kepada yacc. */
/* Asas penyertaan. */
/* . berikutan adalah diiktiraf by yang leksikal penganalisis. */

%token IDENTIFIER /* Termasuk pengecam dan literal */
%token C_IDENTIFIER /* pengecam (tetapi bukan literal)
diikuti dengan:. */
%token NUMBER /* [0-9][0-9]* */

/* Perkataan terpelihara : %type=>TYPE %left=>LEFT, dan seterusnya */

%token KIRI KANAN TOKEN NONASSOC PREC TYPE START UNION

%token MARKAH /* Tanda %%. */
%token LCURL /* Tanda %{. */
%token RCURL /* Tanda %}. */

/* Literal aksara 8-bit berdiri untuk dirinya sendiri; */
/* token perlu ditakrifkan untuk aksara berbilang bait. */

%mulakan spesifikasi

%%

spec : defs MARK rules tail
;
ekor : MARKAH
{
/* Dalam tindakan ini, sediakan seluruh fail. */
}
| /* Kosong; MARKAH kedua adalah pilihan. */
;
defs : /* Kosong. */
| def def
;
def : PENGENALAN MULA
| KESATUAN
{
/* Salin definisi kesatuan ke output. */
}
| LCURL
{
/* Salin kod C ke fail output. */
}
RCURL
| rword tag nlist
;
rword : TOKEN
| DIBIARKAN
| BETUL
| NONASSOC
| JENIS
;
tag : /* Kosong: ID tag kesatuan pilihan. */
| '<' PENGENALAN '>'
;
senarai: nmno
| senaraikan nmno
;
nmno : PENGENALAN /* Nota: literal tidak sah dengan % jenis. */
| NOMBOR PENGENALAN /* Nota: tidak sah dengan % jenis. */
;

/* Bahagian peraturan */

peraturan : C_IDENTIFIER rbadan pra
| peraturan peraturan
;
peraturan : C_IDENTIFIER rbadan prac
| '|' rbody prec
;
rbody : /* kosong */
| PENGENALAN badan
| perbuatan badan
;
bertindak: '{'
{
/* Salin tindakan, terjemah $$ dan seterusnya. */
}
'}'
;
sebelum : /* Kosong */
| PENGENALAN PREC
| akta PREC IDENTIFIER
| prec ';'
;

Konflik
Penghurai yang dihasilkan untuk tatabahasa input mungkin mengandungi keadaan di mana konflik berlaku. The
konflik berlaku kerana tatabahasa tidak LALR(1). Tatabahasa yang samar-samar sentiasa mengandungi
sekurang-kurangnya satu LALR(1) konflik. The yacc utiliti hendaklah menyelesaikan semua konflik, menggunakan sama ada
peraturan lalai atau peraturan keutamaan yang ditentukan pengguna.

Konflik sama ada mengalih/mengurangkan konflik atau mengurangkan/mengurangkan konflik. Anjakan / pengurangan
konflik ialah di mana, untuk keadaan tertentu dan simbol pandangan ke hadapan, kedua-dua tindakan peralihan dan a
mengurangkan tindakan adalah mungkin. Mengurangkan/mengurangkan konflik adalah di mana, untuk keadaan tertentu dan
simbol lookahead, pengurangan dengan dua peraturan berbeza adalah mungkin.

Peraturan di bawah menerangkan cara untuk menentukan tindakan yang perlu diambil apabila konflik berlaku. tidak
semua anjakan/kurangkan konflik boleh berjaya diselesaikan dengan cara ini kerana konflik itu mungkin
disebabkan oleh sesuatu selain daripada kekaburan, jadi penggunaan kemudahan ini secara tidak berhati-hati boleh menyebabkan
bahasa yang diterima oleh penghurai jauh berbeza daripada yang dimaksudkan. The
fail penerangan hendaklah mengandungi maklumat yang mencukupi untuk memahami punca
konflik. Di mana kekaburan adalah sebab sama ada peraturan lalai atau eksplisit sepatutnya
mencukupi untuk menghasilkan penghurai yang berfungsi.

Keutamaan dan pergaulan yang diisytiharkan (lihat Deklarasi seksyen) sudah biasa
selesaikan konflik penghuraian seperti berikut:

1. Keutamaan dan pergaulan dikaitkan dengan setiap peraturan tatabahasa; ia adalah
keutamaan dan perkaitan token atau literal terakhir dalam badan peraturan. Jika
yang %prec kata kunci digunakan, ia mengatasi lalai ini. Beberapa peraturan tatabahasa mungkin tidak
mempunyai keutamaan dan pergaulan.

2. Jika terdapat anjakan/kurangkan konflik, dan kedua-dua peraturan tatabahasa dan simbol input
mempunyai keutamaan dan pergaulan yang dikaitkan dengan mereka, maka konflik itu diselesaikan
memihak kepada tindakan (anjakan atau kurangkan) yang dikaitkan dengan keutamaan yang lebih tinggi. Sekiranya
keutamaan adalah sama, maka persekutuan digunakan; bersekutu kiri membayangkan
mengurangkan, bersekutu kanan membayangkan peralihan, dan tidak bersekutu membayangkan ralat dalam
rentetan sedang dihuraikan.

3. Apabila terdapat pergeseran/kurangkan konflik yang tidak dapat diselesaikan oleh peraturan 2, pergeseran tersebut adalah
selesai. Konflik yang diselesaikan dengan cara ini dikira dalam output diagnostik yang diterangkan dalam
ralat pengendalian.

4. Apabila berlaku konflik kurangkan/kurangkan, pengurangan dilakukan dengan peraturan tatabahasa iaitu
berlaku lebih awal dalam urutan input. Konflik yang diselesaikan dengan cara ini dikira dalam
output diagnostik yang diterangkan dalam ralat pengendalian.

Konflik yang diselesaikan dengan keutamaan atau pergaulan tidak boleh dikira dalam anjakan/kurangkan
dan mengurangkan/mengurangkan konflik yang dilaporkan oleh yacc sama ada pada ralat piawai atau dalam
fail penerangan.

ralat pengendalian
Token itu kesilapan hendaklah dikhaskan untuk pengendalian ralat. Nama kesilapan boleh digunakan dalam
peraturan tatabahasa. Ia menunjukkan tempat di mana penghurai boleh pulih daripada ralat sintaks. The
nilai lalai bagi kesilapan hendaklah 256. Nilainya boleh diubah menggunakan a %token pengisytiharan.
Penganalisis leksikal tidak seharusnya mengembalikan nilai kesilapan.

Penghurai hendaklah mengesan ralat sintaks apabila ia berada dalam keadaan di mana tindakan itu dikaitkan
dengan simbol pandang ke hadapan ialah kesilapan. Tindakan semantik boleh menyebabkan penghurai dimulakan
pengendalian ralat dengan melaksanakan YYERROR makro. Apabila YYERROR dilaksanakan, semantik
tindakan menghantar semula kawalan kepada penghurai. YYERROR tidak boleh digunakan di luar semantik
tindakan.

Apabila penghurai mengesan ralat sintaks, ia biasanya memanggil yyerror() dengan watak
rentetan "sintaksis kesilapan" sebagai hujahnya. Panggilan tidak boleh dibuat jika penghurai masih
pulih daripada ralat sebelumnya apabila ralat dikesan. Penghurai dianggap sebagai
akan pulih daripada ralat sebelumnya sehingga penghurai telah beralih kepada sekurang-kurangnya tiga
simbol input biasa sejak ralat terakhir dikesan atau tindakan semantik telah dilaksanakan
makro yyerrok. Penghurai tidak boleh memanggil yyerror() apabila YYERROR dilaksanakan.

Fungsi makro YYRECOVERING akan mengembalikan 1 jika ralat sintaks telah dikesan dan
parser belum pulih sepenuhnya daripadanya. Jika tidak, sifar akan dikembalikan.

Apabila ralat sintaks dikesan oleh penghurai, penghurai hendaklah menyemak sama ada sintaks sebelumnya
ralat telah dikesan. Jika ralat sebelumnya telah dikesan, dan jika tiada simbol input biasa
telah dialih sejak ralat sebelumnya dikesan, penghurai menyemak sama ada
simbol pandang hadapan ialah penanda (lihat Antara muka kepada yang Leksikal Penganalisis). Jika ia adalah
parser hendaklah kembali dengan nilai bukan sifar. Jika tidak, simbol pandang hadapan hendaklah
dibuang dan penghuraian biasa hendaklah disambung semula.

Apabila YYERROR dilaksanakan atau apabila penghurai mengesan ralat sintaks dan tiada ralat sebelumnya
telah dikesan, atau sekurang-kurangnya satu simbol input biasa telah dialihkan sejak sebelumnya
ralat telah dikesan, penghurai akan muncul kembali satu keadaan pada satu masa sehingga timbunan parse adalah
kosong atau keadaan semasa membenarkan anjakan berakhir kesilapan. Jika parser mengosongkan parse
tindanan, ia akan kembali dengan nilai bukan sifar. Jika tidak, ia akan beralih kesilapan and
kemudian sambung penghuraian biasa. Jika penghurai membaca simbol pandang ke hadapan sebelum ralat itu berlaku
dikesan, simbol itu akan tetap menjadi simbol pandang ke hadapan apabila penghuraian disambung semula.

Makro yyerrok dalam tindakan semantik akan menyebabkan penghurai bertindak seolah-olah ia telah sepenuhnya
dipulihkan daripada sebarang kesilapan sebelumnya. Makro yclearin akan menyebabkan penghurai membuang
token pandang ke hadapan semasa. Jika token pandang ke hadapan semasa belum dibaca,
yclearin tidak akan memberi kesan.

YYACCEPT makro akan menyebabkan penghurai kembali dengan nilai sifar. YYABORT makro
akan menyebabkan penghurai kembali dengan nilai bukan sifar.

Antara muka kepada yang Leksikal Penganalisis
. yylex() fungsi ialah fungsi bernilai integer yang mengembalikan a token nombor
mewakili jenis token yang dibaca. Jika terdapat nilai yang dikaitkan dengan token
dikembalikan oleh yylex() (lihat perbincangan tentang tag di atas), ia hendaklah diserahkan kepada
pembolehubah luaran yylval.

Jika penghurai dan yylex() tidak bersetuju dengan nombor token ini, komunikasi yang boleh dipercayai
antara mereka tidak boleh berlaku. Untuk literal (karakter bait tunggal), token hanyalah
nilai berangka aksara dalam set aksara semasa. Nombor untuk token lain
boleh dipilih oleh yacc, atau dipilih oleh pengguna. Dalam kedua-dua kes, yang #tentukan membina
daripada C digunakan untuk membenarkan yylex() untuk mengembalikan nombor ini secara simbolik. The #tentukan kenyataan
dimasukkan ke dalam fail kod, dan fail pengepala jika fail itu diminta. Set daripada
aksara yang dibenarkan oleh yacc dalam pengecam adalah lebih besar daripada yang dibenarkan oleh C. Token
nama yang didapati mengandungi aksara tersebut tidak boleh dimasukkan dalam #tentukan pengisytiharan.

Jika nombor token dipilih oleh yacc, token selain daripada literal hendaklah diberikan
nombor lebih besar daripada 256, walaupun tiada susunan yang tersirat. Token boleh diberikan secara eksplisit
nombor dengan mengikuti penampilan pertamanya dalam bahagian pengisytiharan dengan nombor.
Nama dan literal yang tidak ditakrifkan dengan cara ini mengekalkan takrif lalainya. Semua nombor token
ditugaskan oleh yacc hendaklah unik dan berbeza daripada nombor token yang digunakan untuk literal dan
token yang diberikan pengguna. Jika nombor token pendua menyebabkan konflik dalam penjanaan parser,
yacc hendaklah melaporkan kesilapan; jika tidak, ia tidak ditentukan sama ada penetapan token itu
diterima atau ralat dilaporkan.

Penghujung input ditandakan dengan token khas yang dipanggil penanda akhir, yang mempunyai token
nombor sifar atau negatif. (Nilai ini tidak sah untuk mana-mana token lain.) Semua
penganalisis leksikal hendaklah mengembalikan sifar atau negatif sebagai nombor token apabila mencapai penghujung
input mereka. Jika token sehingga, tetapi tidak termasuk, penanda akhir membentuk struktur yang
sepadan dengan simbol mula, penghurai hendaklah menerima input. Jika penanda penanda dilihat dalam
mana-mana konteks lain, ia akan dianggap sebagai ralat.

Selesai yang Program
Di samping yyparse() dan yylex(), fungsi yyerror() dan utama() dikehendaki untuk
buat program yang lengkap. Permohonan boleh membekalkan utama() dan yyerror(), atau mereka
rutin boleh diperolehi daripada yacc perpustakaan.

Yacc Perpustakaan
Fungsi berikut akan muncul hanya dalam yacc perpustakaan boleh diakses melalui −l y
operan kepada c99; Oleh itu, ia boleh ditakrifkan semula dengan aplikasi yang mematuhi:

int utama(membatalkan)
Fungsi ini hendaklah memanggil yyparse() dan keluar dengan nilai yang tidak ditentukan. Tindakan lain
dalam fungsi ini tidak ditentukan.

int yyerror(malar tangki *s)
Fungsi ini hendaklah menulis hujah yang ditamatkan NUL kepada ralat standard, diikuti dengan
a .

Urutan dari −l y and −l l operan diberikan kepada c99 adalah penting; permohonan itu hendaklah
sama ada menyediakan sendiri utama() berfungsi atau memastikan bahawa −l y mendahului −l l.

Debugging yang Parser
Penghurai yang dihasilkan oleh yacc hendaklah mempunyai kemudahan diagnostik di dalamnya yang boleh menjadi pilihan
didayakan sama ada pada masa penyusunan atau pada masa jalan (jika didayakan pada masa penyusunan). The
penyusunan kod penyahpepijatan masa jalan adalah di bawah kawalan YYDEBUG, prapemproses
simbol. Jika YYDEBUG mempunyai nilai bukan sifar, kod nyahpepijat hendaklah disertakan. Jika ia
nilai adalah sifar, kod tidak boleh disertakan.

Dalam parser di mana kod penyahpepijatan telah dimasukkan, kod luaran int yydebug boleh
digunakan untuk menghidupkan penyahpepijatan (dengan nilai bukan sifar) dan mematikan (nilai sifar) pada masa jalan. The
nilai awal bagi yydebug hendaklah sifar.

Bila −t ditentukan, fail kod hendaklah dibina sedemikian, jika YYDEBUG belum lagi
ditakrifkan pada masa penyusunan (menggunakan c99 −D Pilihan YYDEBUG, sebagai contoh), YYDEBUG hendaklah
ditetapkan secara eksplisit kepada 1. Apabila −t tidak dinyatakan, fail kod hendaklah dibina sedemikian rupa,
jika YYDEBUG belum ditakrifkan, ia hendaklah ditetapkan secara eksplisit kepada sifar.

Format output penyahpepijatan tidak ditentukan tetapi termasuk sekurang-kurangnya maklumat yang mencukupi
untuk menentukan anjakan dan mengurangkan tindakan, dan simbol input. Ia juga menyediakan
maklumat tentang pemulihan ralat.

Algoritma
Penghurai yang dibina oleh yacc melaksanakan an LALR(1) algoritma penghuraian seperti yang didokumenkan dalam
kesusasteraan. Ia tidak ditentukan sama ada penghurai adalah dipacu jadual atau berkod langsung.

Penghurai yang dihasilkan oleh yacc tidak akan meminta simbol input daripada yylex() semasa dalam a
nyatakan di mana satu-satunya tindakan selain daripada tindakan ralat adalah pengurangan dengan satu peraturan.

Kesusasteraan teori penghuraian mentakrifkan konsep ini.

Batas
. yacc utiliti mungkin mempunyai beberapa jadual dalaman. Maksimum minimum untuk jadual ini
ditunjukkan dalam jadual berikut. Maksud sebenar nilai-nilai ini ialah pelaksanaan-
ditakrifkan. Pelaksanaan hendaklah menentukan hubungan antara nilai-nilai ini dan antara
mereka dan sebarang mesej ralat yang mungkin dihasilkan oleh pelaksanaan sekiranya ia kehabisan
ruang untuk sebarang struktur dalaman. Pelaksanaan boleh menggabungkan kumpulan sumber ini
ke dalam kumpulan tunggal selagi jumlah yang tersedia kepada pengguna tidak jatuh di bawah jumlah
daripada saiz yang ditentukan oleh bahagian ini.

Jadual: Dalaman Batas in yacc

┌───────────┬─────────┬───────────────────────────. ─────┐
│ │ Minimum │ │
HadkanMaksimumPenerangan Produk
├───────────┼─────────┼───────────────────────────. ─────┤
│{NTERMS} │ 126 │ Bilangan token. │
│{NONTERM} │ 200 │ Bilangan bukan terminal. │
│{NPROD} │ 300 │ Bilangan peraturan. │
│{NSTATES} │ 600 │ Bilangan negeri. │
│{MEMSIZE} │ 5200 │ Panjang peraturan. Jumlah │
│ │ │ panjang, dalam nama (token dan │
│ │ │ bukan terminal), daripada semua │
│ │ │ peraturan tatabahasa. │
│ │ │ sebelah kiri dikira untuk │
│ │ │ setiap peraturan, walaupun bukan │
│ │ │ diulang secara eksplisit, sebagai │
│ │ │ dinyatakan dalam Tatabahasa peraturan in
│ │ │ yacc. │
│{ACTSIZE} │ 4000 │ Bilangan tindakan. ``Tindakan'' │
│ │ │ di sini (dan dalam keterangan │
│ │ │ fail) rujuk kepada tindakan penghurai │
│ │ │ (anjakan, kurangkan, dan seterusnya) bukan │
│ │ │ kepada tindakan semantik yang ditakrifkan dalam │
│ │ │ Tatabahasa peraturan in yacc. │
└───────────┴─────────┴───────────────────────────. ─────┘

EXIT STATUS


Nilai keluar berikut hendaklah dikembalikan:

0 Selesai dengan jayanya.

>0 Ralat telah berlaku.

AKIBAT OF KESALAHAN


Jika terdapat sebarang ralat, larian akan dibatalkan dan yacc keluar dengan status bukan sifar.
Fail kod separa dan fail pengepala boleh dihasilkan. Maklumat ringkasan dalam
fail penerangan hendaklah sentiasa dihasilkan jika −v bendera hadir.

. berikutan bahagian adalah bermaklumat.

PERMOHONAN PENGGUNAAN


Pelaksanaan sejarah mengalami konflik nama pada nama yacc.tmp, yacc.acts,
yacc.debug, y.tab.c, y.tab.h, dan y.keluaran jika lebih daripada satu salinan yacc sedang berjalan dalam a
direktori tunggal pada satu masa. The −b pilihan telah ditambah untuk mengatasi masalah ini. The
masalah berkaitan membenarkan berbilang yacc parser untuk diletakkan dalam fail yang sama ialah
ditangani dengan menambah a −p pilihan untuk mengatasi kod keras sebelum ini yy awalan berubah-ubah.

Penerangan mengenai −p pilihan menentukan set minimum fungsi dan nama pembolehubah
yang menyebabkan konflik apabila berbilang parser dipautkan bersama. YYSTYPE tidak perlu
berubah. Sebaliknya, pengaturcara boleh menggunakan −b untuk memberikan fail pengepala untuk penghurai yang berbeza
nama yang berbeza, dan kemudian fail dengan yylex() untuk penghurai yang diberikan boleh memasukkan
pengepala untuk penghurai itu. Nama-nama seperti yclearerr tidak perlu diubah kerana mereka
digunakan hanya dalam tindakan; mereka tidak mempunyai kaitan. Ada kemungkinan bahawa an
pelaksanaan mempunyai nama lain, sama ada dalaman untuk melaksanakan perkara seperti
yclearerr, atau menyediakan ciri bukan standard yang ingin ditukar dengannya −p.

Pengendali unari yang merupakan token yang sama dengan pengendali binari secara amnya memerlukan mereka
keutamaan diselaraskan. Ini dikendalikan oleh %prec simbol nasihat yang berkaitan dengan
peraturan tatabahasa tertentu yang mentakrifkan operator unari itu. (Lihat Tatabahasa peraturan in yacc.)
Aplikasi tidak diperlukan untuk menggunakan operator ini untuk operator unary, tetapi tatabahasa
yang tidak memerlukannya jarang berlaku.

CONTOH


Akses kepada yacc perpustakaan diperolehi dengan operan carian perpustakaan untuk c99. Untuk menggunakan
yacc perpustakaan utama():

c99 y.tab.c −l y

Kedua-dua lex perpustakaan dan yacc perpustakaan mengandungi utama(). Untuk mengakses yacc utama():

c99 y.tab.c lex.yy.c −l y −l l

Ini memastikan bahawa yacc perpustakaan dicari dahulu, supaya ia utama() digunakan.

Sejarah yacc perpustakaan telah mengandungi dua fungsi mudah yang biasanya dikodkan
oleh pengaturcara aplikasi. Fungsi ini serupa dengan kod berikut:

#include
int utama (kosong)
{
luar int yyparse();

setlocale(LC_ALL, "");

/* Jika penghurai berikut adalah yang dicipta oleh lex, the
aplikasi mesti berhati-hati untuk memastikan bahawa LC_CTYPE
dan LC_COLLATE ditetapkan kepada tempat POSIX. */
(kosong) yyparse();
pulangan (0);
}

#sertakan

int yyerror(const char *msg)
{
(kosong) fprintf(stderr, "%s\n", msg);
pulangan (0);
}

RATIONALE


Rujukan dalam Dirujuk dokumen mungkin membantu dalam membina parser
penjana. Artikel DeRemer dan Pennello yang dirujuk (bersama-sama dengan karya it
rujukan) menerangkan teknik untuk menjana penghurai yang mematuhi volum ini
POSIX.1‐2008. Kerja di kawasan ini terus dilakukan, jadi pelaksana harus berunding
literatur semasa sebelum melakukan sebarang pelaksanaan baharu. Artikel asal Knuth ialah
asas teori untuk penghurai jenis ini, tetapi jadual yang dihasilkannya secara tidak praktikal
besar untuk tatabahasa yang munasabah dan tidak boleh digunakan. Perkataan ``bersamaan dengan'' ialah
sengaja untuk memastikan bahawa jadual terbaik yang LALR(1) boleh dihasilkan.

Terdapat kekeliruan antara kelas tatabahasa, algoritma yang diperlukan untuk menjana
penghurai, dan algoritma yang diperlukan untuk menghuraikan bahasa. Mereka semua munasabah
ortogon. Khususnya, penjana parser yang menerima rangkaian penuh LR(1)
tatabahasa tidak perlu menjana jadual yang lebih kompleks daripada yang diterima SLR(1) (a
kelas tatabahasa LR yang agak lemah) untuk tatabahasa yang kebetulan SLR(1). Seperti
pelaksanaan tidak perlu mengiktiraf kes itu, sama ada; pemampatan meja boleh menghasilkan SLR(1)
jadual (atau yang lebih kecil daripada itu) tanpa menyedari bahawa tatabahasa itu SLR(1). The
kelajuan sebuah LR(1) penghurai untuk mana-mana kelas lebih bergantung kepada perwakilan jadual dan
mampatan (atau penjanaan kod jika penghurai langsung dijana) daripada kelas
tatabahasa yang dikendalikan oleh penjana jadual.

Kelajuan penjana parser agak bergantung pada kelas tatabahasanya
pemegang. Walau bagaimanapun, algoritma artikel Knuth asal untuk membina parser LR ialah
dinilai oleh pengarangnya secara tidak praktikal pada masa itu. Walaupun LR penuh lebih
kompleks daripada LALR(1), apabila kelajuan dan algoritma komputer bertambah baik, perbezaannya (dari segi
masa pelaksanaan jam dinding yang boleh diterima) menjadi kurang ketara.

Pengarang berpotensi diberi amaran bahawa artikel DeRemer dan Pennello yang dirujuk
yang dipetik sebelum ini mengenal pasti pepijat (pemudahan pengiraan yang berlebihan LALR(1)
set lookahead) dalam beberapa LALR(1) pernyataan algoritma yang mendahuluinya
penerbitan. Mereka harus meluangkan masa untuk mencari kertas itu, serta relevan semasa
kerja, terutamanya Aho.

. −b pilihan telah ditambahkan untuk menyediakan kaedah mudah alih untuk membenarkan yacc untuk diusahakan
berbilang penghurai berasingan dalam direktori yang sama. Jika direktori mengandungi lebih daripada satu
yacc tatabahasa, dan kedua-dua tatabahasa dibina pada masa yang sama (oleh, sebagai contoh, a
selari membuat program), hasil konflik. Walaupun penyelesaiannya bukan amalan sejarah,
ia membetulkan kekurangan yang diketahui dalam pelaksanaan sejarah. Perubahan yang sepadan ialah
dibuat kepada semua bahagian yang merujuk nama fail y.tab.c (kini ``fail kod''),
y.tab.h (kini ``fail pengepala''), dan y.keluaran (kini ``fail penerangan'').

Tatabahasa untuk yacc input adalah berdasarkan dokumentasi Sistem V. Penerangan teks
menunjukkan di sana bahawa ';' diperlukan pada akhir peraturan. Tatabahasa dan
pelaksanaan tidak memerlukan ini. (Penggunaan C_IDENTIFIER menyebabkan pengurangan berlaku dalam
tempat yang betul.)

Juga, dalam pelaksanaan itu, konstruk seperti %token boleh ditamatkan oleh a
, tetapi ini tidak dibenarkan oleh tatabahasa. Kata kunci seperti %token boleh
juga muncul dalam huruf besar, yang sekali lagi tidak dibincangkan. Di kebanyakan tempat di mana '%' digunakan,
boleh diganti, dan terdapat ejaan ganti untuk beberapa simbol
(sebagai contoh, %DIBIARKAN boleh "%<" atau "\<").

Dari segi sejarah,tag> boleh mengandungi sebarang aksara kecuali '>', termasuk ruang putih, dalam
pelaksanaan. Walau bagaimanapun, sejak tag mesti merujuk ahli kesatuan standard ISO C, dalam
amalan pematuhan pelaksanaan hanya perlu menyokong set aksara untuk ISO C
pengecam standard dalam konteks ini.

Beberapa pelaksanaan sejarah diketahui menerima tindakan yang ditamatkan oleh a
tempoh. Pelaksanaan sejarah selalunya membenarkan '$' dalam nama. Pelaksanaan yang menepati
tidak perlu menyokong salah satu daripada tingkah laku ini.

Memutuskan bila hendak digunakan %prec menggambarkan kesukaran dalam menentukan tingkah laku yacc.
Mungkin terdapat situasi di mana tatabahasa tidak, secara tegasnya, dalam kesilapan, dan lagi
yacc tidak boleh mentafsirkannya dengan jelas. Penyelesaian kekaburan dalam tatabahasa boleh
dalam banyak keadaan boleh diselesaikan dengan menyediakan maklumat tambahan, seperti menggunakan %jenis or
% kesatuan pengisytiharan. Ia selalunya lebih mudah dan ia biasanya menghasilkan parser yang lebih kecil untuk diambil
alternatif ini apabila sesuai.

Saiz dan masa pelaksanaan program yang dihasilkan tanpa kod debugging runtime ialah
biasanya lebih kecil dan lebih pantas sedikit dalam pelaksanaan sejarah.

Mesej statistik daripada beberapa pelaksanaan sejarah termasuk jenis berikut
maklumat:

n/512 terminal, n/300 bukan terminal
n/600 peraturan tatabahasa, n/1500 negeri
n beralih / mengurangkan, n mengurangkan/mengurangkan konflik yang dilaporkan
n/350 set kerja digunakan
Ingatan: menyatakan, dsb. n/15000, penghurai n/ 15000
n/600 set pandangan hadapan yang berbeza
n penutupan tambahan
n penyertaan syif, n pengecualian
n entri goto
n entri disimpan secara lalai goto
Ruang pengoptimum yang digunakan: input n/15000, keluaran n/ 15000
n catatan jadual, n sifar
Spread maksimum: n, Offset maksimum: n

Laporan jadual dalaman dalam fail perihalan dibiarkan ditakrifkan pelaksanaan
kerana semua aspek had ini juga ditentukan oleh pelaksanaan. Beberapa pelaksanaan
boleh menggunakan teknik peruntukan dinamik dan tidak mempunyai nilai had khusus untuk dilaporkan.

Format y.keluaran fail tidak diberikan kerana spesifikasi format tidak
dilihat untuk meningkatkan kemudahalihan aplikasi. Penyenaraian ini bertujuan terutamanya untuk membantu manusia
pengguna memahami dan menyahpepijat penghurai; penggunaan y.keluaran dengan skrip aplikasi yang sesuai
akan menjadi luar biasa. Tambahan pula, pelaksanaan tidak menghasilkan output yang konsisten dan tidak
format popular adalah jelas. Format yang dipilih oleh pelaksanaan haruslah manusia-
boleh dibaca, sebagai tambahan kepada keperluan bahawa ia adalah fail teks.

Laporan ralat standard tidak diterangkan secara khusus kerana ia jarang digunakan
mematuhi aplikasi dan tidak ada sebab untuk menyekat pelaksanaan.

Sesetengah pelaksanaan mengiktiraf "="{" setaraf dengan '{' kerana ia muncul dalam sejarah
dokumentasi. Pembinaan ini telah diiktiraf dan didokumenkan sebagai usang sejak dahulu lagi
1978, dalam rujukan Yacc: Namun demikian Satu lagi Penyusun-Penyusun. Jilid POSIX.1‐2008 ini
memilih untuk meninggalkannya sebagai usang dan meninggalkannya.

Aksara berbilang bait harus dikenali oleh penganalisis leksikal dan dikembalikan sebagai token.
Ia tidak seharusnya dikembalikan sebagai literal aksara berbilang bait. Token itu kesilapan yang digunakan
untuk pemulihan ralat biasanya diberikan nilai 256 dalam pelaksanaan sejarah.
Oleh itu, nilai token 256, yang digunakan dalam banyak set aksara berbilang bait, tidak
tersedia untuk digunakan sebagai nilai token yang ditentukan pengguna.

MASA HADAPAN ARAHAN


Tiada.

Gunakan yaccposix dalam talian menggunakan perkhidmatan onworks.net


Pelayan & Stesen Kerja Percuma

Muat turun apl Windows & Linux

  • 1
    itop - ITSM CMDB OpenSource
    itop - ITSM CMDB OpenSource
    Portal Operasi IT: terbuka sepenuhnya
    sumber, ITIL, perkhidmatan berasaskan web
    alat pengurusan termasuk sepenuhnya
    CMDB boleh disesuaikan, sistem meja bantuan dan
    seorang lelaki dokumen...
    Muat turun itop - ITSM CMDB OpenSource
  • 2
    Clementine
    Clementine
    Clementine ialah muzik berbilang platform
    pemain dan penganjur perpustakaan yang diilhamkan oleh
    Amarok 1.4. Ia mempunyai puasa dan
    antara muka yang mudah digunakan, dan membolehkan anda
    cari dan...
    Muat turun Clementine
  • 3
    XISMuS
    XISMuS
    PERHATIAN: Kemas kini kumulatif 2.4.3 telah
    telah dibebaskan!! Kemas kini berfungsi untuk mana-mana
    versi 2.xx sebelumnya. Jika menaik taraf
    daripada versi v1.xx, sila muat turun dan
    i ...
    Muat turun XISMuS
  • 4
    facetracknoir
    facetracknoir
    Program pengesanan kepala modular yang
    menyokong berbilang penjejak muka, penapis
    dan protokol permainan. Antara penjejak
    ialah SM FaceAPI, Ketua Inersia AIC
    Penjejak ...
    Muat turun facetracknoir
  • 5
    Kod QR PHP
    Kod QR PHP
    Kod QR PHP ialah sumber terbuka (LGPL)
    perpustakaan untuk menjana Kod QR,
    Kod bar 2 dimensi. Berdasarkan
    perpustakaan libqrencode C, menyediakan API untuk
    mencipta bar Kod QR...
    Muat turun Kod QR PHP
  • 6
    freeciv
    freeciv
    Freeciv ialah berasaskan giliran percuma
    permainan strategi berbilang pemain, di mana setiap
    pemain menjadi ketua a
    tamadun, berjuang untuk mendapatkan
    matlamat akhir: menjadi...
    Muat turun Freeciv
  • Lebih »

Arahan Linux

Ad