Michael Haberler
2012-01-31 23:10:04 UTC
[I guess this better belongs here]
ok, while this wonderful discussion was raging on, I built a working parser for the current linuxcnc dialect, as an experiment in feasability (this is NOT an end-user tool!)
http://git.mah.priv.at/gitweb/emc2-dev.git/shortlog/refs/heads/parser-v2-dev
- Michael
ps: I'd appreciate feedback from language geeks wrt to removing shift/reduce conflicts.
-------------- src/emc/parser-v2/README: --------
RS274NGC parser based on Bison/Flex
===================================
usage:
parser [options] ngcfile ...
example:
$ parser emc2-dev/nc_files/*.ngc
no output means good news (parse ok)
other that that, no actions - this is an experiment to find out wether this is feasible
options are:
-v: create listing with interspersed error messages
-s: trace scanning
-p: trace parsing
I'd be grateful for hints how to remove the remaining shift/reduce
conflicts in the grammar. I guess there's something wrong/missing with
operator precedence and/or associativity.
Error messages
--------------
There are no custom error messages yet. All error messages are
autogenerated from the parser, and derived from the grammar, including
the set of permitted tokens, which is already quite reasonable:
$ parser -v emc2-dev/src/emc/parser-v2/ngc/foo.txt
...
#<bar> = [EXISTS[23
-----------------^^
ngc/foo.txt:8:unexpected integer, expecting #
...
m73.1
---^^
ngc/foo.txt:18:unexpected real, expecting one of: <<EOF>> EOL ^ @ % if while break do repeat sub endsub return call # G-code M-code A B C D E F H I J K L P Q R S T U V W X Y Z
...
N3242 G10 x[1
^
ngc/foo.txt:24:unexpected EOL, expecting one of: ] EQ NE GT GE LT LE and or xor + - * / mod pow
...
N3242 G10 x[1]]
--------------^
ngc/foo.txt:25:unexpected ], expecting one of: <<EOF>> EOL ^ @ % if while break do repeat sub endsub return call # G-code M-code A B C D E F H I J K L P Q R S T U V W X Y Z
..
4 error(s)
Error recovery:
---------------
currently, on syntax error the parser skips to the next of line, and
continues, which seems to work ok.
Build notes
-----------
All files needed to compile are in this branch
If you change the grammar: bison 2.5 is needed (Ubuntu 10.04 has 2.4.1 which is too old)
I compiled from source - found no backport.
Flex: the stock flex coming with 10.04 is fine (flex 2.5.35)
Speed is quite good - without spending a thought on optimization and
all debug options on, this parser does about 300.000 lines/second on my MBP.
added Submakefile
base taken from https://idlebox.net/2007/flex-bison-cpp-example/
much of that example code is still to be deleted but then this is
a proof of concept
-mah
------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
Emc-users mailing list
Emc-users-5NWGOfrQmneRv+***@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/emc-users
ok, while this wonderful discussion was raging on, I built a working parser for the current linuxcnc dialect, as an experiment in feasability (this is NOT an end-user tool!)
http://git.mah.priv.at/gitweb/emc2-dev.git/shortlog/refs/heads/parser-v2-dev
- Michael
ps: I'd appreciate feedback from language geeks wrt to removing shift/reduce conflicts.
-------------- src/emc/parser-v2/README: --------
RS274NGC parser based on Bison/Flex
===================================
usage:
parser [options] ngcfile ...
example:
$ parser emc2-dev/nc_files/*.ngc
no output means good news (parse ok)
other that that, no actions - this is an experiment to find out wether this is feasible
options are:
-v: create listing with interspersed error messages
-s: trace scanning
-p: trace parsing
I'd be grateful for hints how to remove the remaining shift/reduce
conflicts in the grammar. I guess there's something wrong/missing with
operator precedence and/or associativity.
Error messages
--------------
There are no custom error messages yet. All error messages are
autogenerated from the parser, and derived from the grammar, including
the set of permitted tokens, which is already quite reasonable:
$ parser -v emc2-dev/src/emc/parser-v2/ngc/foo.txt
...
#<bar> = [EXISTS[23
-----------------^^
ngc/foo.txt:8:unexpected integer, expecting #
...
m73.1
---^^
ngc/foo.txt:18:unexpected real, expecting one of: <<EOF>> EOL ^ @ % if while break do repeat sub endsub return call # G-code M-code A B C D E F H I J K L P Q R S T U V W X Y Z
...
N3242 G10 x[1
^
ngc/foo.txt:24:unexpected EOL, expecting one of: ] EQ NE GT GE LT LE and or xor + - * / mod pow
...
N3242 G10 x[1]]
--------------^
ngc/foo.txt:25:unexpected ], expecting one of: <<EOF>> EOL ^ @ % if while break do repeat sub endsub return call # G-code M-code A B C D E F H I J K L P Q R S T U V W X Y Z
..
4 error(s)
Error recovery:
---------------
currently, on syntax error the parser skips to the next of line, and
continues, which seems to work ok.
Build notes
-----------
All files needed to compile are in this branch
If you change the grammar: bison 2.5 is needed (Ubuntu 10.04 has 2.4.1 which is too old)
I compiled from source - found no backport.
Flex: the stock flex coming with 10.04 is fine (flex 2.5.35)
Speed is quite good - without spending a thought on optimization and
all debug options on, this parser does about 300.000 lines/second on my MBP.
added Submakefile
base taken from https://idlebox.net/2007/flex-bison-cpp-example/
much of that example code is still to be deleted but then this is
a proof of concept
-mah
------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
Emc-users mailing list
Emc-users-5NWGOfrQmneRv+***@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/emc-users