The bug reported in the original post of this thread (checking unclosed comments) is fixed in https://github.com/david-a-wheeler/mmverify.py/pull/10. I'll fix the other bug (checking for untyped active variables) tomorrowish. BenoƮt
On Monday, May 9, 2022 at 10:55:19 PM UTC+2 [email protected] wrote: > Thanks Glauco, > > > (as a first step, I would look into your 'nexttoken' function) > > Nice guess, you had me wondering! But having tried it the performance of > nexttoken() seems nicely linear, and I had to give it ten million tokens > before I noticed it taking time. > https://github.com/Antony74/checkmm-ts/commit/cbccfd3305266531d11258a8e35ef909fd858b91 > > My latest port is not quite ready to parse an mm file, so I don't know if > I'm going to experience non-linear behaviour this time or not, and I didn't > manage to isolate the source of my problem last time round. Maybe what I > ported std::set to was a problem, maybe it was something else. My instinct > is that this time it will be fine, but if it isn't then I intend to get to > the bottom of it! The main reason I started again is that I'm a better > TypeScript programmer than I was in 2019 and I don't feel like my original > attempt at a port was sufficiently faithful to checkmm.cpp. > > > I'm a complete newbie to Typescript and Node.js > > That's cool, I was too once! I might have a slight advantage in that I > also use this tech-stack in my professional work. > > > I have zero experience in managing a github repository, that's why I > prefer to get as close as possible to a "production" level, before > publishing the repository on github. > > github specifically, or version control in general? Once you get used to > version control, you'll never want to do anything without it again! > > I'm expecting the port to be some multiple slower than the original, by > the way - speed isn't that important to me, having a very expressive > language which can create programs that can be accessed from pretty much > any device is what I like. > > Best regards, > > Antony > > > On Mon, May 9, 2022 at 8:39 PM Glauco <[email protected]> wrote: > >> Hi Antony, >> >> if I remember correctly, my first implementation was going n^2, because I >> used something like >> >> tokens = tokens.slice(1) >> >> and >> >> linesToParse = linesToParse.slice(1) >> >> Are you still experiencing the non-linear behavior? (as a first step, I >> would look into your 'nexttoken' function) >> >> >> I'm a complete newbie to Typescript and Node.js and my first parser >> (without verification) took 10 minutes to parse set.mm >> >> Then I looked into Node.js profiling: >> >> https://nodejs.org/en/docs/guides/simple-profiling/ >> >> used with >> >> flame graphs >> https://github.com/brendangregg/FlameGraph >> >> and it was enough to spot the .slice(1) problem: the parse time (without >> verification) went down from 10 minutes to 5 seconds. >> >> You may wish to try those two profiling tools in your project. >> >> >> I've not published the parser, yet. It's a "component" of a larger >> project (a TypeScript language server for mmp files). >> Unfortunately, the .mm parse logic is distributed in several files: >> - the parser is a class with a dedicated file (it has a couple of >> bare-bones parse methods, one synchronous and one asynchronous) >> - the verifier is a class living in its own file >> - a tokenizer (every symbol is annotated with a "Range", info needed for >> producing meaningful language server diagnostics) lives in its own file >> - every mm statement type has its own class (with its own methods); in >> particular, I have a BlockStatement class that has several properties and >> methods, used by the parser/verifier (and it lives in yet another file) >> - the parser also generates a theory specific grammar for Nearly.js (a >> general purpose Early parser); and GrammarManager.ts is yet another file >> >> I have zero experience in managing a github repository, that's why I >> prefer to get as close as possible to a "production" level, before >> publishing the repository on github. >> >> HTH >> Glauco >> >> Il giorno domenica 8 maggio 2022 alle 18:11:26 UTC+2 [email protected] ha >> scritto: >> >>> Hi Glauco, >>> >>> > I've written a TypeScript parser/verifier (one for .mm and one for >>> .mmp format) along the lines of mmverify.py >>> >>> Can I see, please? My interest is that I may have almost completed a >>> port of Eric Schmidt's C++ checkmm verifier to TypeScript >>> >>> https://github.com/Antony74/checkmm-ts >>> >>> (I say "may" because I previously attempted this in 2019 and had a >>> problem with the performance not being linear compared to the original. It >>> passed the test suite for all the smaller files, but had I left it running >>> on set.mm I'm not sure whether it would have completed yet). >>> >>> Best regards, >>> >>> Antony >>> >>> >>> On Sun, May 8, 2022 at 1:17 PM Glauco <[email protected]> wrote: >>> >>>> I can't find test.mm , but I'm using this old post to keep mmverify.py >>>> 'issues' in one place. >>>> >>>> I've written a TypeScript parser/verifier (one for .mm and one for .mmp >>>> format) along the lines of mmverify.py , and I noticed that both my >>>> verifier (and mmverify.py) don't catch an error that metamat.exe instead >>>> does. >>>> >>>> If you remove the line >>>> >>>> vx.wal $f setvar x $. >>>> >>>> from the block of >>>> >>>> wal $a wff A. x ph $. >>>> >>>> mmverify.py doesn't rise an error (of course, the first theorem that >>>> uses wal, that is trujust, will rise an error). >>>> >>>> Instead, metamath.exe, when reading set.mm (then, even before 'verify >>>> proof *' ) returns this error: >>>> >>>> The source has 200287 statements; 2648 are $a and 39659 are $p. >>>> >>>> ?Error on line 23725 of file "set.mm" at statement 4161, label "wal", >>>> type >>>> "$a": >>>> wal $a wff A. x ph $. >>>> ^ >>>> This variable does not occur in any active "$e" or "$f" hypothesis. All >>>> variables in "$a" and "$p" statements must appear in at least one such >>>> hypothesis. >>>> >>>> ?Error on line 23725 of file "set.mm" at statement 4161, label "wal", >>>> type >>>> "$a": >>>> wal $a wff A. x ph $. >>>> The variable "x" does not appear in an active "$f" statement. >>>> >>>> 2 errors were found. >>>> >>>> >>>> I've not looked at the spec in the metamath book, yet, to see if >>>> actually any var is required to have a kind (when used in assertions). >>>> >>>> If I'm not wrong, other verifiers are "based" on mmverify.mm , so I >>>> decided to write this post. >>>> >>>> Glauco >>>> >>>> >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Metamath" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/metamath/d6dd174f-b563-4adb-ad06-5c2531e0520en%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/metamath/d6dd174f-b563-4adb-ad06-5c2531e0520en%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "Metamath" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> > To view this discussion on the web visit >> https://groups.google.com/d/msgid/metamath/eac1f30f-8b88-41fc-9119-9be56731e3b0n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/metamath/eac1f30f-8b88-41fc-9119-9be56731e3b0n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "Metamath" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/metamath/c1ba2f6b-c5c6-42f6-84cc-852b46bee4ban%40googlegroups.com.
