On 02/01/2012 10:45 AM, Michael Haberler wrote:
>
> Am 01.02.2012 um 13:36 schrieb Erik Christiansen:
>
>> On 01.02.12 11:48, Michael Haberler wrote:
>>> Am 01.02.2012 um 09:23 schrieb Erik Christiansen:
>>>> The grammar specifies expression and control flow constructs, but seems
>>>> 100% devoid of any explicit gcode grammar. I've scrolled up and down
>>>> twice now, but still can't see any rapids, moves, feedrates, or
>>>> toolchanges. Nuffin!
>>> Yes, and that is a feature.
>> At some point, LinuxCNC needs to interpret the gcode. The "parser"
>> you've put up does not do that.
>
> Probably folks use the term 'parser' to mean different things, which might be 
> part of the confusion. I use in the Dragonbook/Compilers 101 sense - a 
> program which recognizes certain syntactic constructs and nothing else.
>
> For me the term 'parser' does NOT include static semantic checks, or 
> executable semantics. The term 'interpreter' for me denotes executable 
> semantics, which is different from 'parser', which is a context-free affair 
> so to speak.
>
>> Does it have any purpose, if it does not
>> do that?
> A better definition of the language than we currently have it, executable or 
> in the manual? For instance, we dont have anything like a railroad diagram or 
> a current BNF. And it would be great to have that in particular for 
> beginners. Also an executable version at least as point of reference, and as 
> a vehicle for other software.
>
> Some examples:
>
> 1. Expression syntax
> my parser actually found an error, or rather my misunderstanding of the 
> current language, in one of the files in emc2-dev/nc_files
> see line 30 of 
> http://git.linuxcnc.org/gitweb?p=emc2.git;a=blob;f=nc_files/m6demo.ngc;h=85a3c0f7f031a7735e1660403f22beee90302b4e;hb=50d82f006b489a0e2795e60bd617759c902fdafd#l30
>  :
>       
> O<m6demo_spindle_off>  if [#<tool_change_with_spindle_on>] EQ 0
>
> now if you read http://www.linuxcnc.org/docs/devel/html/gcode/o-code.html, 
> the 'if' examples have bracketed expressions.
> So I though, gee, must be in the language.
> Well guess what, it isnt - the current interpreter (at least at that point) 
> accepts the above line just fine, and I think it skips from the closing 
> bracket to end-of-line - one would have to read the source code to determine 
> acceptable language.
>
> Incidentally the interpretation of 'if [#<tool_change_with_spindle_on>]' and 
> 'if [[#<tool_change_with_spindle_on>] EQ 0]' happen to be the same, but one 
> can do better.
Blame me. Part of my "specification" (which was never written) is that 
the interpreter executes correct programs correctly. I did not implement 
complete error detection. Oword handling is particularly nasty. A "call" 
will execute from the first matching oword sub up to and including the 
matching oword that might be a return or a endsub.
> 2. Is a (comment) whitespace?
> Whitespace is squashed, we hear. Comments are removed, so I assumed they are 
> gone at the language execution level, and are de-facto whitespace.
> Really? let's see:
>
> $ rs274 -g
> ...
> READ =>  s100m3
>    17 N..... SET_SPINDLE_SPEED(100.0000)
>    18 N..... START_SPINDLE_CLOCKWISE()
> READ =>  s 100 m 3
>    19 N..... SET_SPINDLE_SPEED(100.0000)
>    20 N..... START_SPINDLE_CLOCKWISE()
> READ =>  s 100 (on) m 3
>    21 N..... COMMENT("on")
>    22 N..... SET_SPINDLE_SPEED(100.0000)
>    23 N..... START_SPINDLE_CLOCKWISE()
> READ =>  s(hundred) m 3
> bad number format (conversion failed) parsing ''
> s(hundred) m 3
>
> That kind of 'language spec' can stand improvement.. so my parser doubles as 
> a reverse-engineering tool;)
I believe that the comment IS being ignored. The objection isn't to the 
comment; it is to the letter m.

Regards,

Ken
> 3. backplot for CAM programs
> HeeksCad sports some minimalistic understanding of the Gcode it generates, 
> for backplotting the generated tool path. Guess what it uses: a regexp-based 
> 'parser'. Sure.
>
>> A user need which has been expressed in this thread is for a documented
>> gcode grammar. We'd like to know what is legal gcode, and what is not.
>> If no grammar policing exists in the so-called parser, then either
>> almost any input is accepted, or the real parser is elsewhere.
> You'd be suprised on what incredible junk gcc accepts as 'legit grammar' once 
> you amputate the backend ;)
>
> Currently I dont see a formal way to describe the interdependencies of 
> several words on a block. You can do the optional parameter words in the 
> language but you cant recogize the conflicts and multiple uses within a block 
> that way. It would be nice to have.
>
>>> b) the language we have *is already runtime extensible* at the word level
>> According to the documentation here:
>> http://www.linuxcnc.org/docview/devel/html/remap/structure.html#_introduction_extending_the_rs274ngc_interpreter_by_remapping_codes
>>
>> you're almost wholly correct in saying:
>>
>>> and your idea kills this property by downgrading it to a compile-time 
>>> affair.
>> because having a documented grammar in the parser would only allow
>> run-time _extending_the_rs274ngc_interpreter_by_remapping_codes. It
>> would only permit remapping of standard gcodes by changing the grammar.
>> But the need to remap gcodes half way through a swarf-making job,
>> without allowing a compile, is probably a rare requirement.
> Good to see somebody is reading this after all..
>
> But 'remapping' is a bit of a misnomer: while a few codes can be 'remapped' 
> (aka changed), practically unlimited new M- and G-codes can be introduced, 
> with new optional and required word parameters. All this happens at the 
> block/word level of the current parser. I never thought of runtime extensions 
> - this is a configuration time thing.
>
>> my interest lies at the
>> other end of LinuxCNC and the use-case spectrum: Re-using the standard
>> gcode grammar, but cleaning up its appearance.
> we violently agree
>
>> At this stage, I only have a few questions:
>>
>> Do we implement a "default grammar", which we could document in BNF?
>>
>> Is it sufficiently static to warrant the effort of documenting it?
> I'd like to see an unambiguous grammar reference.
>
> So that parser is a start in that direction. Eventually the real thing should 
> actually execute that grammar, there's no point in having an executable doing 
> one thing and the LinuxCNC interpreter something slightly different. That's 
> not urgent though.
>
> In any cleanup/extension effort an executable grammar will help, in 
> particular wrt avoiding backwards compatibility issues.
>
> -m
>
>
> ------------------------------------------------------------------------------
> 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@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/emc-users

------------------------------------------------------------------------------
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@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-users

Reply via email to