Package jay

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

Гэта хатняя старонка Джэй, А LALR (1) генератар сінтаксічных аналізатараў: Берклі Yacc © перанацэлены на C # і Java.

см:
апісанне

Зводка класа
dummy fake class, triggers javadoc.

Пакет Джэй Апісанне

Гэта хатняя старонка Джэй, А LALR (1) генератар сінтаксічных аналізатараў: Берклі Yacc © перанацэлены на C # і Java.

Выкарыстанне

джэй чытае граматыкі спецыфікацыю з файла і генеруе (1) парсер LALR для яго. Аналізатар складаецца з набору табліц разбору і руціны драйвера ад шкілета, які чытаецца з стандартнага ўводу. Існуюць прыдатныя шкілеты для Java і C #. Сталы і кіроўца запісваюцца ў стандартны вывад.

jay [-ctv] [-b file-prefix] grammar skeleton|<skeleton java -jar jay.jar [-ctv] [-b file-prefix] grammar skeleton|<skeleton

Наступныя опцыі даступныя:
-b файл-прэфікс змяняе прэфікс дадаецца да пачатку другасных імёнаў выхадных файлаў у радку, пазначанай file_prefix. Прэфікс па змаўчанні з’яўляецца сімвал у.
-з задавальняе для C дырэктыў препроцессора #line быць уключаны ў выснова. Гэта карысна толькі для C #.
-t задавальняе для адладкі інфармацыю для ўключэння ў выснова. Актуальная інфармацыя кантралюецца шкілета файлаў; а распаўсюджваецца, гэта залежыць ад дадатковых пакетаў падчас выканання. Для C # гэта частка зыходнага запампоўкі для Java см jay.yydebug.
-v выклікае чалавечы чытаны апісанне генераванага сінтаксічнага аналізатара для запісу ў файл file_prefix.output.

Калі адзін з зменных асяроддзі TMPDIR, TMP або TEMP ўстаноўлена, радок з зменнай асяроддзі будзе выкарыстоўвацца ў якасці імя каталога, у якім ствараюцца часовыя файлы.

Фармат уводу

Фармат ўводу і LALR (1) алгарытм ня быў зменены з Yacc. Варта пракансультавацца шырокую літаратуру па Yacc для падрабязнай інфармацыі аб напісання і адладкі граматык, выпраўлення памылак, стратэгій для дзеянняў і г.д.

Адзіныя адрозненні стэк значэнне, ўкладанне генераванага сінтаксічнага аналізатара ў класе, і інтэрфейс да сканару. Усё гэта можа быць зменена шляхам змены шкілетныя файлы. Астатняя частка гэтага падзелу заснавана на шкілет файлаў, якія распаўсюджваюцца з Джэем.

Дырэктыва% саюз быў выдалены. Джэй выкарыстоўвае аб’ект (або System.Object ў C #) для стэка значэнне. Такім чынам, імя ў пазначэннях тэгам <імя> ставіцца да класа або інтэрфейсу.

Гэта мае значэнне для злепкаў, што Джэй генеруе: Ні C #, ні Java дазволаў даручэнні літых зменных. Такім чынам, пазначэнне $$ спасылаецца на аб’ект без кідка, таму што, як правіла, $$ прызначаны. Калі $$ выкарыстоўваецца ў іншых мэтах, як правіла, прыйдзецца выкарыстоўваць відавочнае тыпу $ <імя> $, якая ператварылася ў гіпсе з імем.

Аналагічна, абазначэння $ п рэдка прызначаецца. Таму, сойка будзе генераваць кідок, калі абазначэнне $ <> п не выкарыстоўваецца для прадухілення ліццё.

Джэй не вылучае злепкі на аб’ект. Гэтыя злепкі звычайна не патрабуецца, і гэта стратэгія дазваляе пазбегнуць паведамлення шматлікія папярэджаньні, але гэта можа прывесці да сюрпрыз у перагрузкі сітуацыі.

Джэй не мае ніякага паняцця аб праве на спадчыну. Гэта можа прывесці да неабгрунтаваным папераджальных паведамленняў аб сумніўных скардзяцца заданняў. Было выказана меркаванне, што гэтыя паведамленні, як правіла, карысна, нават калі некаторыя з іх з’яўляюцца памылковымі.

Джынэрыкі

Табліцы і каркасна-файлы сойка не выкарыстоўваць параметризованные тыпы. jay.yydebug кадуецца без параметризованных тыпаў; Тым не менш, крыніцы ўтрымліваюць код з дженеріков ў лініях, якія ў гэты момант будуць закаментаваць.

Абазначэння <тэг> можа ўтрымліваць укладзеныя вуглавыя дужкі і ў іх сымбалі [] пустым? , У дадатак да звычайных літарна-лічбавых знакаў і. $ _. Тым не менш, спасылкі на значэнне стэка $ N адлітыя з выкарыстаннем прымяняецца тэг і прывядзення да параметризованной тыпу прыцягне адзначанае папярэджанне ў Java.

Клас парсер можа быць з аннотациейSuppressWarnings (“неправераных”); Аднак, у той час як гэта можа быць лад жыцця для Java 5 гэта, верагодна, неразумна.

Шкілет Файлы

Двайковы або зыходны загрузкі ўключае ў сябе два шкілета файлы для Java і адзін для C #. Шкілет файл кіруе фармат генераваных табліц і ўключае ў сябе фактычны алгарытм сінтаксічнага аналізатара, якая інтэрпрэтуе табліцы. Алгарытмы аднолькавыя ва ўсіх распаўсюджваюцца файлаў, але skeleton.tables ініцыялізуе розныя табліцы, чытаючы файл рэсурсаў падчас выканання; гэта дазваляе пазбегнуць мяжа, сістэма Java накладвае на памер сегмента кода для класа.

Каб стварыць файл рэсурсаў, генераваць парсер з дапамогай skeleton.tables. З крыніцы аналізатара выняць роўна радкі, якія пачынаюцца з // уу і выдаліць менавіта гэты прэфікс. Атрыманы файл павінен быць размешчаны ў тым жа каталогу, што і файл класа парсера і павінны выкарыстоўваць імя класа парсера і суфікс .tables.

Гэта не павінна быць неабходна змяніць шкілетныя файлы, але толькі ў выпадку, калі яны шырока каментуе. Файлы лінія-арыентаванай. Персанаж у першым слупку вызначае, што адбываецца ў радку: # азначае каментар і радок ігнаруецца. , адзначае радок, якая будзе скапіяваная без вядучага перыяд.

т адзначае радок, якая мае дачыненне да трасіроўку. Звычайна ён капіюецца з вядучым // T; калі опцыя -t усталёўваецца лінія скапіяваныя без вядучага т.

Нарэшце, лінія з вядучай нарыхтоўкі ўтрымлівае каманду, якая прыводзіць да выхаду некаторай інфармацыі табліцы і якія могуць выкарыстоўваць астатнюю частку лініі ў якасці параметру.

дзеянні кода вылучаюць з дзеянняў, як цела перамыкача.
Эпілог вылучаюць тэкст пасля другога %%.
мясцовы вылучаюць тэкст ўнутры {%}% пасля першага %%.
Пралог вылучаюць тэкст ўнутры {%}% да першага %%.
жэтоны прэфікс вылучаюць кожны значэнне маркера ў выглядзе ініцыялізаваць ідэнтыфікатара з пакінутай часткі радка ў якасці прэфікса.
Версія каментар выпраменьваюць // каментар з пакінутай часткі радка.
yyCheck прэфікс
yyDefRed прэфікс
yyDgoto прэфікс
yyGindex прэфікс
yyLen прэфікс
yyLhs прэфікс
yyRindex прэфікс
yySindex прэфікс
yyTable прэфікс вылучаюць цела адпаведнай табліцы з астаткам радкі ў якасці прэфікса для кожнай выхадны лініі.
yyFinal прэфікс вылучаюць значэнне як инициализатором з пакінутай часткі радка ў якасці прэфікса.
yyNames прэфікс вылучаюць табліцу ў выглядзе спісу слоў з пакінутай часткі радка як прэфікс для кожнага выхаднога лініі.
yyNames-струны выпраменьваюць табліцу ў выглядзе спісу радковых инициализаторах.
yyRule прэфікс вылучаюць табліцу ў выглядзе спісу радкоў з пакінутай часткі радка як прэфікс для кожнага выхаднога лініі.
yyRule-струны выпраменьваюць табліцу ў выглядзе спісу радковых инициализаторах.

Кожная табліца папярэднічаецца каментаром з інфармацыяй вымярэння.

Кіраванне класа

Дызайн файла шкілета павінен разгледзець дзве праблемы: як ўбудаваць аналізатар ў класе і як інтэрфейс да сканару.

Размеркаваныя пачатковыя файлы чакаць карыстачу паставіць пралог у межах% {%}, які змяшчае загалоўка класа і пастаўляць эпілог пасля другой %%, якая закрывае гэты клас. Джэй не ведае, імя класа парсера.

Інтэрфейс да yyInput сканэра генеруецца ў якасці члена кожнага класа аналізатара; Гэта можа ці не можа быць добрым выбарам. Ёсць тры спосабу: наперад не мае аргументаў і павінен вяртаць булева значэнне, якое паказвае, што сканар паспяхова выняты яшчэ адзін ўваходных сімвал; маркер не мае аргументаў і павінна вяртаць бягучы сімвал ўводу як цэлы лік, якое чакае парсер; значэнне не мае аргументаў і можа вярнуць значэнне аб’екта, які будзе змешчаны ў стэк дзяржаўнага / значэнне для ўваходнага знака. Трасіроўка чакае маркер і значэнне пастаяннай функцыі паміж кожным выкліку наперад.

Відавочныя значэння лексем генеруюцца ў выглядзе канстант у класе аналізатара. Асобныя знакі ўяўляюць самі сябе; Аднак, для тых, хто лічыць, Джэй ў ASCII, а затым набор знакаў Unicode. Гэта, магчыма, было б лепш, каб вызначыць канстанты ў інтэрфейсе сканара, але чакаецца, што сканар выкананы ў выглядзе ўнутранага класа парсера. PJ падтрымлівае гэтую пункт гледжання, нават калі сканар відавочна пабудаваны з выкарыстаннем JLex.

Загрузкі

Версія:
1.1.1, чэрвеня 2006.
Аўтар:
Аксель Т. Шрайнер.

 

Comments are closed.