Balíček jay popis

Link: https://www.cs.rit.edu/~ats/projects/lp/doc/jay/package-summary.html

Toto je domovská stránka Jay, LALR(1) generátor: Berkeley yacc © revidovaná k C# a Java.
Využití
Jay gramatiky specifikace načte ze souboru a vytvoří LALR(1) analyzátoru pro něj. Analyzátor je tvořena sadou zpracování tabulek a řidič běžné ze skeletu, která se čte ze standardního vstupu. Pro Java a C# existují vhodné kostry. Tabulky a ovladače jsou zapsány do standardního výstupu.
Jay [-ctv] [-b Předpona souboru] gramatika kostra | < kostra
Java-jar jay.jar [-ctv] [-b Předpona souboru] gramatika kostra | < kostra
K dispozici jsou následující možnosti:
Předpona souboru – b změní předponu před názvy souborů sekundární výstupní řetězec, označený file_prefix. Výchozí předpona je znak y.
-c uspořádá pro direktivy preprocesoru #line C musí být součástí výstupu. To je užitečné pro C#.
-t uspořádá pro informace, které mají být začleněny do výstupu ladění. Aktuální informace je řízen ukázkové soubory; Jak distribuovat to závisí na dalších runtime balíčky. Pro C# to je součástí stahování zdroj pro Java viz jay.yydebug.
-v způsobuje slovní popis generované analyzátorem budou zapsány do souboru file_prefix.output.
Je-li jedna z proměnných prostředí TMPDIR, TMP a TEMP nastavena, řetězec z proměnné prostředí se použije jako název adresáře, kde jsou vytvořeny dočasné soubory.
Vstupní formát
Vstupní formát a algoritmus LALR(1) nebyly změněny od yacc. Jeden by měl poradit rozsáhlá literatura na yacc podrobné informace o vytváření a ladění gramatiky, zotavení po chybě, strategie pro akce, atd.
Jediné rozdíly jsou hodnota zásobníku, vkládání analyzátor generované třídy a rozhraní skeneru. Všechny z nich lze změnit změnou ukázkové soubory. Zbývající část tohoto oddílu je založen na ukázkové soubory distribuované s jay.
% Unie směrnice byla odebrána. Jay používá objekt (nebo System.Object v jazyce C#) pro hodnotu zásobníku. V důsledku toho v <name>notace značky odkazuje název třídy nebo rozhraní.
To důsledky pro nádech tohoto jay generuje: ani C# ani Java povolit přiřazení k proměnným lité. Proto zápis $$ odkazuje na objekt bez osazení, protože $$ je obvykle přiřazen. Pokud $ je používán pro jiné účely, obvykle bude muset použít explicitní typ $<name>$, který se proměnil v obsazení názvu.
Podobně notace $n zřídka přiřazen. Proto jay vygeneruje obsazení, pokud zápis $<>n se používá k zabránění lití.
Jay nevypouští nádech do objektu. Tyto odlitky jsou obvykle zbytečné a tato strategie se vyhýbá mnoho varovných zpráv, ale mohlo by to způsobit překvapení v přetížení situaci.
Jay nemá žádnou představu o dědičnosti. To může vést k neopodstatněné upozornění stěžují na pochybné přiřazení. Rada se domnívala, že tyto zprávy jsou obecně užitečné, i když některé z nich jsou chybné.
Obecné typy
Nepoužívejte tabulky a ukázkové soubory Jay podle typů. Jay.yydebug je kódována bez podle typů; prameny však obsahují kód s generik v řádcích, které v tuto chvíli jsou zakomentovány.
Zápis <tag>může obsahovat vnořené lomenými závorkami a v rámci nich prázdné znaky []?, kromě obvyklé alfanumerické znaky a. $ _. Nicméně odkazy na hodnotu zásobníku $n odevzdá, pomocí příslušné značky a cast podle typu bude čerpat nekontrolovanou varování v Javě.
Analyzátor třída mohla být komentována s @SuppressWarnings(“unchecked”); i když to může být způsob života pro Java 5 je moudré.
Ukázkové soubory
Binární soubor nebo zdroj ke stažení obsahuje dva ukázkové soubory pro Java a jeden pro C#. Kostru souboru kontroluje Formát generovaných tabulek a zahrnuje vlastní analyzátor algoritmus, který interpretuje tabulky. Algoritmy jsou stejné ve všech distribuovaných souborů, ale skeleton.tables Inicializuje různé tabulky načtením souboru prostředků v době provádění; tím se zabrání limit, který Java systém ukládá na velikost segmentu kódu pro třídu.
Chcete-li vytvořit soubor prostředků, generovat analyzátor pomocí skeleton.tables. Od zdroje analyzátor extrahovat přesně řádky začínající //yy a odstranit přesně tento prefix. Výsledný soubor by měl být umístěn ve stejném adresáři jako soubor třídy parser a používejte název třídy parser a přípona .tables.
To by nemělo být nezbytné změnit ukázkové soubory, ale jen v případě, jsou značně poznamenal. Soubory jsou orientované. Postava v prvním sloupci určuje, co se stane s linií: # označuje komentář a řádku je ignorováno. . označuje řádek, který je kopírován bez úvodní tečky.
t označuje řádek, který je relevantní pro sledování. Za normálních okolností je zkopírováno s přední / / t; Pokud je nastavena možnost -t řádek zkopírován bez předních t.
Konečně řádek s předním prázdné obsahuje příkaz, jehož výsledkem výstupu nějaké informace v tabulce, a který lze použít zbytek řádku jako parametr.
akce generuje kód z akcí jako tělo přepínače.
Epilog vypouštějí následující druhý text %%.
lokální posílat text v %{%} po prvním %%.
Prolog posílat text v rámci %{%} před prvním %%.
tokeny předpona emitují každé hodnoty jako inicializovat identifikátor zbytek řádku jako předponu.
emitování poznámky verze / / komentář zbytek řádku.
yyCheck předpona
yyDefRed předpona
yyDgoto předpona
yyGindex předpona
yyLen předpona
yyLhs předpona
yyRindex předpona
yySindex předpona
yyTable předpona uvolňují tělo v příslušné tabulce s zbytek řádku jako předponu pro každý řádek výstupu.
yyFinal předpona generuje hodnotu jako inicializátor zbytek řádku jako předponu.
yyNames předpona generuje tabulku jako seznam slov s zbytek řádku jako předponu pro každý řádek výstupu.
yyNames řetězce generuje tabulku jako seznam řetězec Inicializátory.
yyRule předpona generuje tabulku jako seznam linek s zbytek řádku jako předponu pro každý řádek výstupu.
yyRule řetězce generuje tabulku jako seznam řetězec Inicializátory.
Každá tabulka předponu komentář s informací o dimenzi.
Třídy Správa
Konstrukce kostry souboru nemá uvažovat dva problémy: jak vložit parser v třídě a jak rozhraní skeneru.
Distribuované ukázkové soubory očekávat uživatele prolog v %{%} obsahující záhlaví třídy a poskytovat epilog po druhé %% který zavře tuto třídu. Jay nezná název třídy analyzátoru.
Rozhraní skeneru yyInput je generována jako člen každé třídy analyzátor; To může nebo nemusí být dobrou volbou. Existují tři metody: předem nemá žádné argumenty a musí vrátit logickou hodnotu označující, že skener úspěšně extrahovány jiného vstupního symbolu; token nemá žádné argumenty a vrátit aktuální vstupního symbolu jako celočíselnou hodnotu, která očekává, že analyzátor; hodnota, nemá žádné argumenty a vrátit hodnotu objektu na hodnotu a stavu zásobníku vstupního symbolu. Trasování očekává token a hodnota konstantní funkce mezi každé volání na předem.
Explicitní hodnoty token jsou generovány jako konstanty ve třídě analyzátor. Jednotlivé znaky představují samy o sobě; Avšak pro ty jay věří v ASCII spíše pak znakové sady Unicode. To by bývalo bylo lepší definovat konstanty v rozhraní skeneru, ale předpokládá se, že skener je implementován jako vnitřní třída analyzátoru. PJ podporuje tento názor i v případě, že skener je výslovně vytvořen pomocí JLex.
Soubory ke stažení
Verze:
1.1.1, červen 2006.
Autor: