discover/grub2: improve handling of word & delimiter tokens
authorJeremy Kerr <jk@ozlabs.org>
Mon, 1 Dec 2014 03:47:16 +0000 (11:47 +0800)
committerJeremy Kerr <jk@ozlabs.org>
Mon, 1 Dec 2014 04:09:53 +0000 (12:09 +0800)
commit00a881a1adb6f656049939adecb9bf9edd29a658
tree20fb132fd91c7ce718244ab9884efe0859e7eef0
parent46fbb1e1e33b130284ec211f9c647268ff709ba7
discover/grub2: improve handling of word & delimiter tokens

Currently, the delimiter token handling is a little fragile: we try to
ignore non-inter-word delimiters in the lexer with a selective set of
regexes on the possible delimiter characters.

This means we don't need to handle potential delimiters in every grammar
rule, but there are other situations (not regex-able) where we may see
delimters, and this will cause a parse error.

Instead of relying on the regex behaviour, we have an 'inter_word' flag,
which is set when we see the first word token, and cleared when we see
an end-of-line token. We only emit TOKEN_DELIM when this flag is set.

This means that we only get the delim tokens when they're required -
when we're looking for word separators (becuase WORD DELIM WORD is
distinct from WORD WORD - eg "linux /vmlinux" and "x$var").

We add a few new tests for the "menuentry" and "if" syntax, with
different delimiter configurations.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
discover/grub2/grub2-lexer.l
discover/grub2/grub2-parser.y
discover/grub2/grub2.h
test/parser/Makefile.am
test/parser/test-grub2-if-formats.c [new file with mode: 0644]
test/parser/test-grub2-menuentry-formats.c [new file with mode: 0644]
test/parser/test-grub2-noeol.c [new file with mode: 0644]