1
0
mirror of synced 2026-01-21 02:18:17 +00:00
whitequark 93bc5affd3 Allow attributes on individual switch cases in RTLIL.
The parser changes are slightly awkward. Consider the following IL:

    process $0
      <point 1>
      switch \foo
        <point 2>
        case 1'1
          assign \bar \baz
          <point 3>
          ...
        case
      end
    end

Before this commit, attributes are valid in <point 1>, and <point 3>
iff it is immediately followed by a `switch`. (They are essentially
attached to the switch.) But, after this commit, and because switch
cases do not have an ending delimiter, <point 3> becomes ambiguous:
the attribute could attach to either the following `case`, or to
the following `switch`. This isn't expressible in LALR(1) and results
in a reduce/reduce conflict.

To address this, attributes inside processes are now valid anywhere
inside the process: in <point 1> and <point 3> a part of case body,
and in <point 2> as a separate rule. As a consequence, attributes
can now precede `assign`s, which is made illegal in the same way it
is illegal to attach attributes to `connect`.

Attributes are tracked separately from the parser state, so this
does not affect collection of attributes at all, other than allowing
them on `case`s. The grammar change serves purely to allow attributes
in more syntactic places.
2019-07-08 11:34:58 +00:00
..
2015-09-01 12:40:36 +02:00
2017-02-23 14:21:02 +01:00
2019-04-23 17:54:00 +01:00
2015-07-02 11:14:30 +02:00
2019-06-13 16:28:11 -07:00
2019-04-29 19:20:33 +09:00
2019-06-20 10:27:59 -07:00
2016-02-01 10:10:20 +01:00
2015-07-02 11:14:30 +02:00
2019-05-07 12:17:56 -05:00