From a02ba006de66f86ae766eb24f4158c7614bf3b5f Mon Sep 17 00:00:00 2001 From: Yehowshua Immanuel Date: Tue, 10 Dec 2024 13:35:31 -0500 Subject: [PATCH] stopping point8 before repairing parser --- TODO.md | 53 ++++++++------------------------------- src/RTLILParser/Parser.hs | 6 ++--- 2 files changed, 13 insertions(+), 46 deletions(-) diff --git a/TODO.md b/TODO.md index 4bb47ca..f07f6d7 100644 --- a/TODO.md +++ b/TODO.md @@ -12,64 +12,29 @@ - [ ] add validation section to README - [ ] just support Cell memV2 - [ ] for value, what happens if we have 0 binary digits - - [ ] modify parser to ignore comments... - should probably wait until - parser is finished before asking - [ ] modify AST to support src tracking - needed to allow for human readable and correctable validation errors - [ ] when writing simulator, must specify directions on cell ports - - [ ] in the , why are we allowed to have before - and after the optional stmt? If the ordering here is - semantically significant, then modify AST to only have single - `[AssignStmt]` field and update parser behavior accordingly. - - [ ] inspect Chris's mini-RTLIL - - [ ] add RST grammar file to repo - - [ ] name parsers so that that we know where failures occured + - [ ] track RTLIL EBNF spec vs RTLIL Lex/Yacc implementation + [deviation issue][deviation-issue] + - [ ] Update issue above with fact that `` is also missing - [ ] may want to also derive equality statements - - [x] replace both `pEol *> pMaybeWs` and `pEol <* pMaybeWs` - with `pEolAndAdvanceToNextNonWs` - [x] Check inline sequencing of whitespace parsers in do blocks. Terminating instances of `pWs` should be preceeded by `<*` - - [ ] Verify no backtracking needed when sequencing `many` parsers. - Basically, we want to make sure that the argument of the `many` - parser doesn't conflict(exhibit a partial early match) with - the argument of the parser after the argument of the `many` parser. # Parser Development - - [x] Sync - - [ ] Process - - [x] Finish `pCell` with `pCellEndStmt` - - [ ] Rewrite `pWireStmt` and `pMemoryStmt` using do-notation... - - [x] Remove all instances of `_ <-` - - [ ] Module - [ ] Remove weird GHC imports + - [ ] Test `fsm1.il` which has recursive slices on line 180 - [ ] Embed locs in AST - - [ ] Scrap `pEolAndAdvanceToNextNonWs` and use `tok` - - [ ] Remove `preProcessDiscardComments` from exports - - [ ] Install README in dir containing `Parser.hs` - - [ ] Discuss deviations of parser against Yosys behaviors - - [x] Are the `try` statements in `pWireOption` correctly constructed? - - [ ] Consider the very weird case where the process body has nothing, - thus, `pEolAndAdvanceToNextNonWs` may never get invoked in any of - the sub-parsers encapsulated in `pProcessBody`. Do we need to - advance whitespaces so we can hit ``? - - [ ] What are the implications for other parsers? - - I think that in this case we're OK as `` necessarily - precedes `` and `` terminates in an EOL - parser that advances to the next non-whitespace. - - I still need to verify how other parsers behave. For example, what - happens if we have a cell with no `` + - [ ] Name new parsers + - [ ] Remove `a` and `val` from exports # Parser Verification - [ ] I think only EOL terminated parsers should be responsible - for advancing the Parsec scanner to the next non-space... + for advancing the Parsec scanner to the next token - [ ] lift grammar into prover and show that all EOL terminated parsers are either followed by EOF or a keyword such "module", "autoidx", etc - - [ ] first, manually inspect switch parser and try and see if it - can infinitely recurse... Then empirically validate against - corpus # Simulation Behavior - [ ] Figure out the computational semantics of what it means to @@ -82,4 +47,6 @@ - [ ] Subsequent IR passes may emerge natrually # Optimizations - - [ ] squeeze out recursive slices \ No newline at end of file + - [ ] squeeze out recursive slices + +[deviation-issue]: https://github.com/YosysHQ/yosys/issues/4811 \ No newline at end of file diff --git a/src/RTLILParser/Parser.hs b/src/RTLILParser/Parser.hs index 38b705a..29de085 100644 --- a/src/RTLILParser/Parser.hs +++ b/src/RTLILParser/Parser.hs @@ -67,11 +67,9 @@ import RTLILParser.Primitives( -- taken from: https://yosyshq.readthedocs.io/projects/yosys/en/0.47/appendix/rtlil_text.html -- parsers below are split int sections from the above link -runParser str = case parse pFile "pFile" preProcessedFile of --- runParser str = case parse pCell "pCell" preProcessedFile of +runParser str = case parse pFile "pFile" str of Left err -> error $ show err Right val -> val - where preProcessedFile = str -- identifiers pId :: Parser Id @@ -305,6 +303,8 @@ pWireOption :: Parser WireOption pWireOption = p name where name = "WireOption" p = + -- We technically don't need the first `try` below so this is a + -- stylistic choice. The other `try` statements are needed. try (WireOptionWidth <$> (string "width" *> pWs *> pInteger)) <|> try (WireOptionOffset <$> (string "offset" *> pWs *> pInteger)) <|> try (WireOptionInput <$> (string "input" *> pWs *> pInteger)) <|>