grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Standalone problem to test syntax rules


From: Marco Gerards
Subject: Re: Standalone problem to test syntax rules
Date: Sun, 22 Jul 2007 15:06:49 +0200
User-agent: Gnus/5.110006 (No Gnus v0.6) Emacs/21.4 (gnu/linux)

Bean <address@hidden> writes:


Hi Bean,

> I have written a small problem to test my parse.y, to compile, use the
> following commands:
>
> bison -d -p grub_script_yy -b grub_script parser.y 
> gcc -oparser parser.c lexer.c grub_script.tab.c
>
> After compilation, run parser
>
> ./parser
>
> Just enter the commands after '##', and the syntax tree associtaed with it
> will be displayed.
>
> The program support option - , which is used to disable prompt '##' and '>>'.
> This is useful when inputting from files:
>
> ./parser - < input_file
>
> Some example:
>
> ## aa "aa${BB}cc" "\
>>dd"
> CMD
>   TEXT
>     STR  "aa"
>   TEXT
>     STR  "aa"
>     VAR  "BB"
>     STR  "cc"
>   TEXT
>     STR  "dd"

[...]

> The reason why I like to use binary tree is:
>
> 1. Standard data type for all script elements, only one set of function is
> needed to manipulate the structure.
>
> 2. Enumeration and deallocation is simpler. Instead of using switch, we
> can enumerate the tree using its two branch, child and next.
>
> I also figure out how to release memory when syntax error occurs. When a
> node is first created using grub_script_newnode, it's added to a linked
> list state->free_list. When it's referenced, it's moved from the linked
> list to the branch of a tree. If the whole script is parsed, all nodes
> will be moved to the final tree, but if it fails at some point, partial
> built element can be found in the free list. This way, we can also keep
> track of nodes allocated. For example, consider this command:

You are right that it has advantages.  But I prefer using an Abstract
Syntax Tree.  It is used a lot in most literature on parsers, clean
and easy to understand.

The disadvantage is that you need a separate free routine for each
kind of node.  But heck, we can even generalize this!

I agree there is a lot of room for improvement.  But stepping away
from using ASTs is not the way to go in my opinion.

--
Marco





reply via email to

[Prev in Thread] Current Thread [Next in Thread]