mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-23 12:24:34 +00:00
Fix BNF nits in TableGen language reference.
Summary: In the course of writing an experimental ANTLR grammar based on this document, I found three errors in the documented BNF: SimpleValues of dag type are allowed to have no operands at all after the initial DagArg specifying the operator. For example, the value (outs) is extremely common in backends; an example in the test suite is test/TableGen/AsmVariant.td line 30. But the BNF doesn't allow DagArgList to expand to the empty string (it must contain at least one DagArg), and therefore the DagArgList specifying the operands in the dag-shaped production for SimpleValue should be optional. In the production for BodyItem with a 'let' and an optional RangeList, the RangeList should have braces around it if it's present, matching code such as "let E{7-0} = ..." on test/TableGen/BitsInit.td line 42. Those braces aren't included in the RangeList nonterminal itself, so instead they need to be part of the optional segment of the BodyItem production. Finally, the identifier after 'defm' should be optional. Again, this is very common in the real back end .td files; an example in the test suite is in test/TableGen/defmclass.td line 49. Reviewers: rengolin, nhaehnle, stoklund Reviewed By: nhaehnle Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D45818 llvm-svn: 330570
This commit is contained in:
parent
74cb5781ea
commit
d6b1d9a9cf
@ -294,7 +294,7 @@ given values.
|
||||
leave it out.
|
||||
|
||||
.. productionlist::
|
||||
SimpleValue: "(" `DagArg` `DagArgList` ")"
|
||||
SimpleValue: "(" `DagArg` [`DagArgList`] ")"
|
||||
DagArgList: `DagArg` ("," `DagArg`)*
|
||||
DagArg: `Value` [":" `TokVarName`] | `TokVarName`
|
||||
|
||||
@ -325,7 +325,7 @@ It is after parsing the base class list that the "let stack" is applied.
|
||||
Body: ";" | "{" BodyList "}"
|
||||
BodyList: BodyItem*
|
||||
BodyItem: `Declaration` ";"
|
||||
:| "let" `TokIdentifier` [`RangeList`] "=" `Value` ";"
|
||||
:| "let" `TokIdentifier` [ "{" `RangeList` "}" ] "=" `Value` ";"
|
||||
|
||||
The ``let`` form allows overriding the value of an inherited field.
|
||||
|
||||
@ -353,7 +353,7 @@ a ``foreach``.
|
||||
--------
|
||||
|
||||
.. productionlist::
|
||||
Defm: "defm" `TokIdentifier` ":" `BaseClassListNE` ";"
|
||||
Defm: "defm" [`TokIdentifier`] ":" `BaseClassListNE` ";"
|
||||
|
||||
Note that in the :token:`BaseClassList`, all of the ``multiclass``'s must
|
||||
precede any ``class``'s that appear.
|
||||
|
Loading…
x
Reference in New Issue
Block a user