Re: Assembler in Lex/Yacc



"Sanky" <spamtrap@xxxxxxxxxx> wrote:
>
>I was working on an assembler for X64 architecture. I was wondering
>what are the tradeoffs in designing an assembler using lex or re2c and
>yacc? Why is that handwritten assemblers are more popular than those
>developed using lex/yacc? Developing a grammar is the toughest part,
>but once you have a grammar ready, I think the rest of the routines are
>pretty strightforward? Is it that code generated by Lex/Yacc is not as
>efficient?
>YASM does get close, but again it resorts to hand written code at some
>places.
>
>Is it that Lex/Yacc is an overkill or is that Lex/Yacc are not the
>right tools? I'm new to compiler and assembler design, and would be
>helpful if anyone can guide.

There are several reasons for this, none of them completely compelling.

In my view, lex and yacc were designed to solve a different class of
problem. Most assembly languages are not context-free LALR grammars. They
are leftovers from the days when we keypunched lines of assembler into
fixed fields. Things like that tend to be awkward in yacc.

Now, it would certainly be possible to define an assembly language that
looked more like the things usually handled by yacc. Randall's HLA is one
such example; I suspect its grammar is quite yaccable.

On another level, most assemblers have a rather simple format. It is often
easier to visualize how to parse and translate it by hand than it is to
visualize how to express it to lex and yacc.

I do want to address one specific item in your message:

>Is it that code generated by Lex/Yacc is not as efficient?

This represents an interesting misconception. The efficiency of the
generated code is not a concern. Unlike a compiled language, there are not
multiple ways of translating an assembler instruction[*]. "mov eax, dword
ptr [ebx+7]" must generate one machine language instruction (8B 43 07). You
don't get to generate intermediate results and resolve temporaries; you
must translate one assembler instruction into one machine instruction.

[*] Pedant is will note that there ARE multiple ways of encoding some x86
instructions. This is not important here.
--
- Tim Roberts, timr@xxxxxxxxx
Providenza & Boekelheide, Inc.

.



Relevant Pages

  • Assembler using Lex/Yacc
    ... I was working on an assembler for X64 architecture. ... Is it that code generated by Lex/Yacc is not as ... [Lex and yacc only automate the front end of a compiler, ...
    (comp.compilers)
  • Re: Assembler using Lex/Yacc
    ... The only overhead I'd imagine is the learning curve. ... Getting yacc and lex to do same ... record-oriented processing is required for your assembler -- usually ...
    (comp.compilers)
  • Re: assembler in lex and yacc
    ... ankur chauhan wrote: ... My professor has given a project in which i have to make an assembler ... using lex and yacc. ...
    (comp.lang.misc)
  • Re: assembler in lex and yacc
    ... My professor has given a project in which i have to make an assembler ... using lex and yacc. ... Have you considered asking your professor? ...
    (comp.lang.misc)
  • assembler in lex and yacc
    ... My professor has given a project in which i have to make an assembler ... using lex and yacc. ... Can anyone help me out in this regard as to what exactly i have to ...
    (comp.lang.misc)