emlai / emregex Goto Github PK
View Code? Open in Web Editor NEWSimple regular expression engine in C
License: The Unlicense
Simple regular expression engine in C
License: The Unlicense
2.9.2017 20:55
Koodisi on selkeää ja fiksusti toteutettua. Muistinhallinta ja taulukon laajennus on hyvin toteutettu parseSeq funktiossa.
parseSeq-funktiossa on tosin bugi, joka johtaa segfaulttiin. Mikäli syötteessä on yksi ylimääräinen avaava sulku ja parseSeq funktiota kutsutaan seuraavasti: parseSeq(&node,')')
, parseSeq lukee nollatavun yli ja osuu laittomaan muistialueeseen.
Asian voi korjata vertaamalla parseSeqin while-loopissa tokenia sekä annettuun terminator
-muuttujaan että nollatavuun.
Samanlainen bugi on myös parseRange-funktiossa, kohdassa, jossa tarkistetaan useaa vaihtoehtoista merkkiä hakasulkeiden sisällä. Tällöin, jos sulkevaa hakasulkua ei ole, päädytään taas sallitun muistin ulkopuolelle. Tämän voi korjata samalla tavalla vertaamalla reRBracketin lisäksi myös nollatavuun.
Lisäksi kannattaisi muuttaa else
parseRange-funktiossa else if (ch != 0)
:ksi, jotta vältyttäisiin nollan yli lukemiselta elsen sisällä.
static reNode parseRange(void) {
reNode node;
node.lowerbound = lex();
int ch = lex();
if (ch == '-') {
// Contiguous range expressed with a hyphen, e.g. [a-z].
node.type = reRange;
node.upperbound = lex();
if (lex() != reRBracket) error("expected ']' to terminate range");
} else {
...
Muuten koodisi on melko idiomaattista ja selkeää C:tä, ja globaalin muuttujan root
käyttö toimii hyvin kirjastossa.
Moi
ladattu 19.2. 14:30
Ohjelma kääntyi hyvin, eikä virheitä tullut. Testejä en kuitenkaan saanut
toimimaan (ruby 2.3.1), "make test" tuotti virheilmoituksen
Makefile:61: recipe
for target 'test' failed make: *** [test] Error 8
Muutamilla eri lausekkeilla kokeillen ohjelma vaikuttaa toimivan odotetusti.
Itse koodia oli tosi helppo lukea. Kommentointi oli kattavaa ja ohjelman rakenne
vaikutti järkevältä. Myös Testejä näyttää olevan laajasti, rajatapauksille ja
erilaisille syötteille.
Readmehen voisi varmaan lisätä vielä lyhyesti ohjelman käytöstä. Käyttö ei ole
monimutkaista, mutta on mukavampi suorittaa ohjelma kun tietää vähän mitä
odottaa.
Jos aikaa riittää, niin vaikkapa grep-tyylinen väritys matchaaviin osioihin
voisi olla kiva. En osaa kyllä sanoa kuinka helppo/vaikea tälläinen ominaisuus
on tehdä.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.