Itusilẹ ti olupilẹṣẹ atunnkanka lexical re2c 1.2

waye tu silẹ re2c, monomono atunnkanka lexical ọfẹ fun awọn ede C ati C ++. Ranti pe a ti kọ re2c ni ọdun 1993 nipasẹ Peter Bambulis gẹgẹbi olupilẹṣẹ esiperimenta ti awọn olutupalẹ lexical ti o yara pupọ, ti o yatọ si awọn olupilẹṣẹ miiran ni iyara ti koodu ti ipilẹṣẹ ati wiwo olumulo ti o rọ ni aiṣedeede ti o fun laaye awọn atunnkanka lati ni irọrun ati imudara daradara sinu koodu to wa tẹlẹ. ipilẹ. Lati igbanna, iṣẹ akanṣe naa ti ni idagbasoke nipasẹ agbegbe ati tẹsiwaju lati jẹ pẹpẹ fun awọn idanwo ati iwadii ni aaye ti awọn girama ti iṣe deede ati awọn ẹrọ ipinlẹ ipari.

Igbaradi fun itusilẹ gba fere ọdun kan. Pupọ julọ akoko naa, bi nigbagbogbo, ni a lo lori idagbasoke ilana ilana ati kikọ
awọn nkan "Isediwon Submatch POSIX daradara lori NFA".
Awọn algoridimu ti a ṣapejuwe ninu nkan naa jẹ imuse ni ile-ikawe esiperimenta libre2c
(kikọ ile-ikawe ati awọn idanwo iṣẹ jẹ alaabo nipasẹ aiyipada ati ṣiṣẹ nipasẹ aṣayan atunto “-enable-libs”). Ile-ikawe naa ko ṣe ipinnu bi oludije si awọn iṣẹ akanṣe ti o wa tẹlẹ bii RE2, ṣugbọn bi pẹpẹ iwadii fun idagbasoke awọn tuntun
awọn algoridimu (eyiti o le ṣee lo ni re2c tabi ni awọn iṣẹ akanṣe miiran). O tun rọrun lati oju wiwo ti idanwo, wiwọn iṣẹ ṣiṣe ati ṣiṣẹda awọn asopọ si awọn ede miiran.

Awọn imotuntun akọkọ ni ẹya re2c 1.2:

  • Ṣe afikun ọna irọrun tuntun fun ṣiṣe ayẹwo opin data titẹ sii (“ofin EOF”). Fun eyi, iṣeto “re2c: eof” ti ṣafikun,
    gba ọ laaye lati yan ohun kikọ ebute,
    ati ki o kan pataki ofin "$", eyi ti o ti lo jeki ti o ba ti lexer
    ni aṣeyọri de opin data titẹ sii.
    Itan-akọọlẹ, re2c n pese yiyan ti awọn ọna ijerisi pupọ fun
    opin awọn igbewọle ti o yatọ ni aropin, ṣiṣe ati ayedero
    awọn ohun elo. Awọn titun ọna ti a ṣe lati simplify kikọ koodu, nigba ti
    nigba ti o ku munadoko ati ki o ni opolopo wulo. Awọn ọna atijọ
    ṣi ṣiṣẹ ati pe o le jẹ ayanfẹ ni awọn igba miiran.

  • Ṣe afikun agbara lati ṣafikun awọn faili ita ni lilo itọsọna kan
    "/*!include:re2c "file.re" */", nibiti "file.re" ti jẹ orukọ faili ti o yẹ ki o wa. Re2c n wa awọn faili ninu pẹlu itọsọna faili,
    bakannaa ninu atokọ ti awọn ọna ti a sọ nipa lilo aṣayan “-I”.
    Awọn faili to wa le pẹlu awọn faili miiran.
    Re2c n pese awọn faili “boṣewa” ninu iwe ilana “pẹlu/”.
    ise agbese - o ti wa ni o ti ṣe yẹ wipe wulo itumo yoo kojọpọ nibẹ
    deede expressions, nkankan bi awọn boṣewa ìkàwé.
    Nitorinaa, ni ibeere ti awọn oṣiṣẹ, faili kan pẹlu awọn asọye ti awọn ẹka Unicode ti ṣafikun.

  • Ṣe afikun agbara lati ṣe ina awọn faili akọsori pẹlu lainidii
    akoonu nipa lilo awọn aṣayan "-t --type-header" (tabi yẹ
    awọn atunto) ati awọn itọsọna titun "/*! akọsori: re2c: lori * /" ati
    "/*! akọsori:re2c:pa*/". Eyi le wulo ni awọn ọran nibiti
    nigbati re2c nilo lati ṣe ipilẹṣẹ awọn asọye ti awọn oniyipada, awọn ẹya ati awọn macros,
    ti a lo ninu awọn ẹya itumọ miiran.

  • Re2c ni oye awọn ọrọ gangan UTF8 ati awọn kilasi ihuwasi ni awọn ikosile deede.
    Nipa aiyipada, re2c tumọ awọn ọrọ bi "∀x∃y" bi
    lẹsẹsẹ awọn ohun kikọ ASCII 1-bit "e2 88 80 78 20 e2 88 83 79"
    (awọn koodu hex), ati awọn olumulo ni lati sa fun awọn ohun kikọ Unicode pẹlu ọwọ:
    "\\ u2200x \\ u2203y". Eyi jẹ airọrun pupọ ati airotẹlẹ fun ọpọlọpọ
    awọn olumulo (bi ẹri nipasẹ awọn ijabọ kokoro igbagbogbo). Nitorina bayi
    re2c n pese aṣayan "--input-encoding {ascii | utf8}",
    eyiti o fun ọ laaye lati yi ihuwasi pada ki o sọ “∀x ∃y” bi
    "2200 78 20 2203 79."

  • Re2c ni bayi ngbanilaaye awọn bulọọki re2c deede lati ṣee lo ni ipo “-r --reuse”.
    Eyi rọrun ti faili titẹ sii ni ọpọlọpọ awọn bulọọki ati diẹ ninu wọn nikan
    nilo lati tun lo.

  • Bayi o le ṣeto ọna kika ti awọn ikilo ati awọn ifiranṣẹ aṣiṣe
    lilo aṣayan titun "--location-format {gnu | msvc}". GNU ọna kika ti han
    bi "orukọ faili: laini: iwe:", ati ọna kika MSVC gẹgẹbi "orukọ faili (ila, ọwọn)".
    Ẹya yii le wulo fun awọn ololufẹ IDE.
    Aṣayan “--verbose” tun ti ṣafikun, eyiti o ṣafihan ifiranṣẹ iṣẹgun kukuru ti o ba ṣaṣeyọri.

  • Ipo “ibaramu” pẹlu irọrun ti ni ilọsiwaju - diẹ ninu awọn aṣiṣe itupalẹ ti wa titi ati
    iṣaaju oniṣẹ ti ko tọ ni awọn iṣẹlẹ toje.
    Ni itan-akọọlẹ, aṣayan "-F --flex-support" gba ọ laaye lati kọ koodu
    adalu ni Flex ara ati re2c ara, eyi ti o mu kikopa kekere kan soro.
    Ipo ibaramu Flex jẹ ṣọwọn lo ninu koodu titun,
    ṣugbọn re2c tẹsiwaju lati ṣe atilẹyin fun ibaramu sẹhin.

  • Onišẹ iyokuro kilasi ohun kikọ "/" wa ni bayi
    ṣaaju fifi koodu sii, eyiti o fun laaye laaye lati lo ni nọmba nla ti awọn ọran,
    ti o ba ti lo fifi koodu ipari gigun ohun kikọ (fun apẹẹrẹ UTF8).

  • Faili ti o wu jade ni a ṣẹda ni atomiki: re2c ṣẹda faili igba diẹ ni akọkọ
    ati kọ abajade sinu rẹ, ati lẹhinna tunrukọ faili igba diẹ si iṣẹjade
    ọkan isẹ.

  • Awọn iwe ti pari ati tun kọ; ni pataki, awọn tuntun ni a ṣafikun
    awọn ipin nipa http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и nipa awọn ọna lati ṣayẹwo fun opin data titẹ sii.
    Awọn iwe titun ni a gba ni fọọmu naa
    itọsọna oju-iwe kan okeerẹ
    pẹlu awọn apẹẹrẹ (awọn orisun kanna ni a ṣe ni manpage ati ninu iwe ori ayelujara).
    Awọn igbiyanju ti ko dara ni a ti ṣe lati mu ilọsiwaju kika ti aaye naa wa lori awọn foonu.

  • Lati oju wiwo ti awọn olupilẹṣẹ, re2c ti ni eto ipilẹ-pipe diẹ sii
    n ṣatunṣe aṣiṣe Koodu yokokoro ti wa ni alaabo bayi ni awọn kikọ idasilẹ ati
    le mu ṣiṣẹ nipa lilo aṣayan atunto "-enable-debug".

orisun: opennet.ru

Fi ọrọìwòye kun