Do I need a parser?
On Saturday, June 29, 2019 at 8:40:06 AM UTC-4, jos? mariano wrote:
> Dear all,
> I'm sure that this subject has been addressed many times before on this forum, but my poor knowledge of English and of computer jargon and concepts results on not being able to find the answer i'm looking for when I search the forum.
> So here is my problem: I have this open source project for the scientific community were i want to duplicate an old MS-DOS application written in Fortran. I don't have the source code. The idea is to re-write the software in Python. Originally, the old application would would need to input files: one config file, written with a specific format (see below) and a second one, the so-called scrip file, that defines the sequence of operations to be performed by the main software, also written in a specific format.
> To make the transition to the new application as painless as possible to the users, because most of them have their collection of scrips (and settings) developed over the years and are not willing to learn a new script language, I would like to make the new app 100% compatible with the old input files.
> The operation of the new software would be like this: From the shell, run "my_new_software old_script_file.***". The new software would load the old_script, parse it (?), set the internal variables, load the script and run it.
> So, to get to my questions:
> - To load and read the config file I need a parser, right? Is their a parser library where we can define the syntax of the language to use? Are there better (meaning easier) ways to accomplish the same result?
> - For the interpretation of the script file, I don't have any clue how to this... One important thing, the script language admits some simple control flow statements like do-wile, again written using a specific sintax.
> Thanks a lot for the help and sorry for the long post.
> Example of a config (settings) file
> CONDAD -11
> BURAD2 4 SALT1 1.0 KNO3
> ELEC5 -2.0 mV 400 58 0. 0
> Example of a script
> !Conductivity titration
> cmnd bur1 f
> set vinit 100
> set endpt 2000
> set mvinc 20
> set drftim 1
> set rdcrit cond 0.5 per_min
> set dosinc bur1 0.02 1000
> set titdir up
> titratc cond bur1
You've had already very good advise; all I wanted to do is recommend the use of PyParsing (https://github.com/pyparsing/pyparsing).
It helped me a lot in creating and parsing a simple grammar I had to implement in a personal project. If you've ever used lex or yacc you'll appreciate PyParsing's simplicity. Of course, as with anything else; there is a (rather small) learning curve