diff options
author | Richard Henderson <richard.henderson@linaro.org> | 2020-05-18 08:45:32 -0700 |
---|---|---|
committer | Richard Henderson <richard.henderson@linaro.org> | 2020-06-08 11:09:43 -0700 |
commit | 067e8b0f45d650ced89a638577b85443f3333480 (patch) | |
tree | 9027fde954fafc653854e0dfd2210f1dc133b4b4 /scripts | |
parent | 08561fc1283568d9892033f98651010a18d8f108 (diff) | |
download | qemu-067e8b0f45d650ced89a638577b85443f3333480.zip qemu-067e8b0f45d650ced89a638577b85443f3333480.tar.gz qemu-067e8b0f45d650ced89a638577b85443f3333480.tar.bz2 |
decodetree: Implement non-overlapping groups
Intended to be nested within overlapping groups.
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Suggested-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/decodetree.py | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/scripts/decodetree.py b/scripts/decodetree.py index 0ba01e0..7e3b1d1 100755 --- a/scripts/decodetree.py +++ b/scripts/decodetree.py @@ -1021,16 +1021,20 @@ def parse_file(f, parent_pat): del toks[0] # End nesting? - if name == '}': + if name == '}' or name == ']': if len(toks) != 0: error(start_lineno, 'extra tokens after close brace') if len(parent_pat.pats) < 2: error(lineno, 'less than two patterns within braces') + # Make sure { } and [ ] nest properly. + if (name == '}') != isinstance(parent_pat, IncMultiPattern): + error(lineno, 'mismatched close brace') + try: parent_pat = nesting_pats.pop() except: - error(lineno, 'mismatched close brace') + error(lineno, 'extra close brace') nesting -= 2 if indent != nesting: @@ -1044,11 +1048,14 @@ def parse_file(f, parent_pat): error(start_lineno, 'indentation ', indent, ' != ', nesting) # Start nesting? - if name == '{': + if name == '{' or name == '[': if len(toks) != 0: error(start_lineno, 'extra tokens after open brace') - nested_pat = IncMultiPattern(start_lineno) + if name == '{': + nested_pat = IncMultiPattern(start_lineno) + else: + nested_pat = ExcMultiPattern(start_lineno) parent_pat.pats.append(nested_pat) nesting_pats.append(parent_pat) parent_pat = nested_pat @@ -1067,6 +1074,9 @@ def parse_file(f, parent_pat): else: parse_generic(start_lineno, parent_pat, name, toks) toks = [] + + if nesting != 0: + error(lineno, 'missing close brace') # end parse_file |