[libre-riscv-dev] [Bug 280] POWER spec parser needs to support fall-through cases

bugzilla-daemon at libre-riscv.org bugzilla-daemon at libre-riscv.org
Sun Apr 5 18:01:18 BST 2020


http://bugs.libre-riscv.org/show_bug.cgi?id=280

Jacob Lifshay <programmerjake at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |programmerjake at gmail.com

--- Comment #2 from Jacob Lifshay <programmerjake at gmail.com> ---
(In reply to Luke Kenneth Casson Leighton from comment #0)
> this is very tricky to get working at the *lexer* level and still support
> whitespace indentation.
> 
> switch (n)
>     case(1): x <- 5
>     case(2): # here
>     case(3):
>         x <- 3
>     default:
>         x <- 9
> print (5)

How about switching the grammar to parse a case-sequence instead of a single
case, that way multiple cases before a statement block would be correctly
handled.

It might look like the following (doesn't handle empty lines):

switch := "switch" LPAREN expression RPAREN NL INDENT (case_sequence
case_body)+ DEDENT

case_sequence := (case NL)* case (NL default)?
              | default

case := "case" LPAREN expression RPAREN COLON

default := "default" COLON

case_body := statement_with_nl
          | NL INDENT statement_with_nl+ DEDENT

statement_with_nl := lhs "<-" expression NL
          | ...

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the libre-riscv-dev mailing list