ការចេញផ្សាយម៉ាស៊ីនភ្លើង re2c lexer 1.2

បានកើតឡើង ការដោះលែង re2c, свободного генератора лексических анализаторов для языков C и C++. Напомним, что re2c был написан в 1993 году Питером Бамбулисом как экспеиментальный генератор очень быстрых лексических анализаторов, отличающийся от других генераторов скоростью сгенерированного кода и необычно гибким пользовательским интерфейсом, который позволяет легко и эффективно встривать анализаторы в существующую кодовую базу. С тех пор проект развивается сообществом и продолжает оставаться площадкой для экспериментов и исследований в области формальных грамматик и конечных автоматов.

Подготовка релиза заняла почти целый год. Большинство времени, как всегда, ушло на разработку теоретической базы и написание
статьи «Efficient POSIX Submatch Extraction on NFA"។
ក្បួនដោះស្រាយដែលបានពិពណ៌នានៅក្នុងអត្ថបទត្រូវបានអនុវត្តនៅក្នុងបណ្ណាល័យពិសោធន៍ libre2c
(сборка библиотеки и тестов производительности выключена по умолчанию и включается configure-опцией «—enable-libs»). Библиотека задумана не как конкурент уже существующим проектам, таким как RE2, а как исследовательская площадка для разработки новых
алгоритмов (которые потом могут использоваться в re2c или в других проектах). Также это удобно с точки зрения тестирования, измерения производительности и создания биндингов к другим языкам.

Основные новшества в версии re2c 1.2:

  • Добавлен новый упрощённый способ проверки конца входных данных («EOF rule»). Для этого добавлена конфигурация «re2c:eof»,
    អនុញ្ញាតឱ្យអ្នកជ្រើសរើសតួអក្សរស្ថានីយ,
    и специальное правило «$», которое срабатывает если лексер
    បានឈានដល់ចុងបញ្ចប់នៃទិន្នន័យបញ្ចូលដោយជោគជ័យ។
    ជាប្រវត្តិសាស្ត្រ re2c ផ្តល់នូវជម្រើសនៃវិធីសាស្រ្តផ្ទៀងផ្ទាត់ជាច្រើនសម្រាប់
    ចុងបញ្ចប់នៃធាតុចូលមានភាពខុសប្លែកគ្នាក្នុងការកំណត់ ប្រសិទ្ធភាព និងភាពសាមញ្ញ
    កម្មវិធី។ វិធីសាស្រ្តថ្មីនេះត្រូវបានរចនាឡើងដើម្បីសម្រួលការសរសេរកូដ ខណៈ
    ខណៈពេលដែលនៅតែមានប្រសិទ្ធភាព និងអាចអនុវត្តបានយ៉ាងទូលំទូលាយ។ វិធីចាស់
    នៅតែដំណើរការ ហើយអាចត្រូវបានគេពេញចិត្តនៅក្នុងករណីខ្លះ។

  • បានបន្ថែមសមត្ថភាពក្នុងការបញ្ចូលឯកសារខាងក្រៅដោយប្រើការណែនាំ
    «/*!include:re2c «file.re» */», где «file.re» — это имя включаемго файла. Re2c ищет файлы в директории включащего файла,
    а также в списке путей заданных с помощью опции «-I».
    ឯកសារដែលរួមបញ្ចូលអាចរួមបញ្ចូលឯកសារផ្សេងទៀត។
    Re2c предоставляет «стандартные» файлы в директории «include/»
    គម្រោង - វាត្រូវបានគេរំពឹងថានិយមន័យមានប្រយោជន៍នឹងកកកុញនៅទីនោះ
    កន្សោមធម្មតា អ្វីមួយដូចជាបណ្ណាល័យស្តង់ដារ។
    រហូតមកដល់ពេលនេះ តាមសំណើរបស់កម្មករ ឯកសារមួយដែលមាននិយមន័យនៃប្រភេទយូនីកូដត្រូវបានបន្ថែម។

  • បានបន្ថែមសមត្ថភាពក្នុងការបង្កើតឯកសារបឋមកថាដោយបំពាន
    содержанием при помощи опций «-t —type-header» (или соответствующих
    конфигураций) и новых директив «/*!header:re2c:on*/» и
    «/*!header:re2c:off*/». Это может быть полезно в случаях,
    នៅពេលដែល re2c ត្រូវការបង្កើតនិយមន័យនៃអថេរ រចនាសម្ព័ន្ធ និងម៉ាក្រូ។
    ប្រើក្នុងឯកតាបកប្រែផ្សេងទៀត។

  • ឥឡូវនេះ Re2c យល់អក្សរ UTF8 និងថ្នាក់តួអក្សរនៅក្នុងកន្សោមធម្មតា។
    По умолчанию, re2c парсит выражения вроде «∀x ∃y» как
    последовательность 1-битных ASCII-символов «e2 88 80 78 20 e2 88 83 79»
    (លេខកូដគោលដប់ប្រាំមួយ) ហើយអ្នកប្រើប្រាស់ត្រូវគេចចេញពីតួអក្សរយូនីកូដដោយដៃ៖
    «\\u2200x \\u2203y». Это очень неудобно и неожиданно для многих
    អ្នកប្រើប្រាស់ (បង្ហាញដោយរបាយការណ៍កំហុសថេរ)។ ដូច្នេះ​ឥឡូវនេះ
    re2c предоставляет опцию «—input-encoding {ascii | utf8}»,
    которая позволяет изменить поведение и распарсить «∀x ∃y» как
    «2200 78 20 2203 79».

  • Re2c теперь позволяет использовать обычные re2c-блоки в режиме «-r —reuse».
    វាងាយស្រួលប្រសិនបើឯកសារបញ្ចូលមានប្លុកជាច្រើន ហើយមានតែមួយចំនួនប៉ុណ្ណោះ។
    ត្រូវការប្រើឡើងវិញ។

  • ឥឡូវនេះ អ្នកអាចកំណត់ទម្រង់នៃការព្រមាន និងសារកំហុស
    с помощью новой опции «—location-format {gnu | msvc}». GNU-формат отображается
    как «filename:line:column:», а MSVC-формат — как «filename(line,column)».
    មុខងារនេះអាចមានប្រយោជន៍សម្រាប់អ្នកស្រឡាញ់ IDE។
    Также была добавлена опция «—verbose», которая выводит краткое победоносное сообщение в случае успеха.

  • Доработан режим «совместимости» с flex — исправлены некоторые ошибки разбора и
    អាទិភាពប្រតិបត្តិករមិនត្រឹមត្រូវនៅក្នុងករណីដ៏កម្រ។
    Исторически опция «-F —flex-suppor» позволяет писать код
    លាយបញ្ចូលគ្នាក្នុងរចនាប័ទ្ម flex និងរចនាប័ទ្ម re2c ដែលធ្វើឱ្យការវិភាគពិបាកបន្តិច។
    របៀបភាពឆបគ្នា Flex កម្រត្រូវបានប្រើនៅក្នុងកូដថ្មី
    ប៉ុន្តែ re2c បន្តគាំទ្រវាសម្រាប់ភាពឆបគ្នាថយក្រោយ។

  • Оператор вычитания символьных классов «/» теперь применяется
    មុន​ពេល​ពង្រីក​ការ​អ៊ិនកូដ ដែល​អនុញ្ញាត​ឱ្យ​វា​ត្រូវ​បាន​ប្រើ​ក្នុង​ករណី​ច្រើន​ជាង​មុន
    ប្រសិនបើការអ៊ិនកូដប្រវែងតួអក្សរអថេរត្រូវបានប្រើ (ឧទាហរណ៍ UTF8)។

  • ឯកសារលទ្ធផលឥឡូវត្រូវបានបង្កើតតាមបែបអាតូមៈ re2c បង្កើតឯកសារបណ្តោះអាសន្នជាមុនសិន
    ហើយសរសេរលទ្ធផលទៅក្នុងវា ហើយបន្ទាប់មកប្តូរឈ្មោះឯកសារបណ្តោះអាសន្នទៅជាលទ្ធផល
    ប្រតិបត្តិការមួយ។

  • ឯកសារត្រូវបានបញ្ចប់ និងសរសេរឡើងវិញ; ជាពិសេស ថ្មីៗត្រូវបានបន្ថែម
    главы про http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и អំពីវិធីដើម្បីពិនិត្យមើលការបញ្ចប់នៃទិន្នន័យបញ្ចូល.
    ឯកសារថ្មីត្រូវបានប្រមូលជាទម្រង់
    исчерпывающейго одностраничного руководства
    ជាមួយឧទាហរណ៍ (ប្រភពដូចគ្នាត្រូវបានបង្ហាញនៅក្នុងទំព័រមេ និងក្នុងឯកសារអនឡាញ)។
    ការប៉ុនប៉ងមិនល្អត្រូវបានធ្វើឡើងដើម្បីបង្កើនលទ្ធភាពអានគេហទំព័រនៅលើទូរស័ព្ទ។

  • តាមទស្សនៈរបស់អ្នកអភិវឌ្ឍន៍ re2c បានទទួលប្រព័ន្ធរងពេញលេញជាង
    ការកែកំហុស កូដបំបាត់កំហុសឥឡូវនេះត្រូវបានបិទនៅក្នុងការចេញផ្សាយ និង
    может быть включен с помощью configure-опции «—enable-debug».

ប្រភព: opennet.ru

បន្ថែមមតិយោបល់