From f7313ee61a9fad7281d3e9ad1d13c99ad1f3b549 Mon Sep 17 00:00:00 2001 From: rvcas Date: Wed, 16 Nov 2022 11:16:45 -0500 Subject: [PATCH] feat: some parsing for comments --- crates/lang/src/parser.rs | 3 +- crates/lang/src/parser/lexer.rs | 60 +++++++++++-------- examples/sample/assets/swap/spend/mainnet.txt | 2 +- .../assets/swap/spend/payment_script.json | 2 +- examples/sample/assets/swap/spend/script.txt | 2 +- examples/sample/assets/swap/spend/testnet.txt | 2 +- 6 files changed, 40 insertions(+), 31 deletions(-) diff --git a/crates/lang/src/parser.rs b/crates/lang/src/parser.rs index 5ec275e5..e53f082a 100644 --- a/crates/lang/src/parser.rs +++ b/crates/lang/src/parser.rs @@ -47,7 +47,8 @@ pub fn module( false } Token::EmptyLine => { - extra.empty_lines.push(span.end); + println!("{:?}", span); + extra.empty_lines.push(span.start); false } diff --git a/crates/lang/src/parser/lexer.rs b/crates/lang/src/parser/lexer.rs index 4933168d..c07d05cc 100644 --- a/crates/lang/src/parser/lexer.rs +++ b/crates/lang/src/parser/lexer.rs @@ -5,7 +5,7 @@ use crate::ast::Span; use super::{error::ParseError, token::Token}; pub fn lexer() -> impl Parser, Error = ParseError> { - let int = text::int(10).map(|value| Token::Int { value }); + let int = choice((text::int(10), text::int(16))).map(|value| Token::Int { value }); let op = choice(( just("==").to(Token::EqualEqual), @@ -30,6 +30,7 @@ pub fn lexer() -> impl Parser, Error = ParseError> { just("||").to(Token::VbarVbar), just('|').to(Token::Vbar), just("&&").to(Token::AmperAmper), + just("\n\n").to(Token::EmptyLine), )); let grouping = choice(( @@ -95,32 +96,39 @@ pub fn lexer() -> impl Parser, Error = ParseError> { } }); - let token = choice((keyword, int, op, grouping, string)) - .or(any().map(Token::Error).validate(|t, span, emit| { - emit(ParseError::expected_input_found( - span, - None, - Some(t.clone()), - )); - t - })) - .map_with_span(move |token, span| (token, span)) - .padded() - .recover_with(skip_then_retry_until([])); + let module_comments = + just("////").ignore_then(take_until(text::newline()).to(Token::ModuleComment)); + + let doc_comments = just("///") + .ignore_then(take_until(text::newline())) + .to(Token::DocComment); let comments = just("//") - .then_ignore( - just('(') - .ignore_then(take_until(just(")#")).ignored()) - .or(none_of('\n').ignored().repeated().ignored()), - ) - .padded() - .ignored() - .repeated(); + .ignore_then(take_until(text::newline())) + .to(Token::Comment); - token - .padded_by(comments) - .repeated() - .padded() - .then_ignore(end()) + choice(( + module_comments, + doc_comments, + comments, + keyword, + int, + op, + grouping, + string, + )) + .or(any().map(Token::Error).validate(|t, span, emit| { + emit(ParseError::expected_input_found( + span, + None, + Some(t.clone()), + )); + t + })) + .map_with_span(move |token, span| (token, span)) + .padded() + .recover_with(skip_then_retry_until([])) + .repeated() + .padded() + .then_ignore(end()) } diff --git a/examples/sample/assets/swap/spend/mainnet.txt b/examples/sample/assets/swap/spend/mainnet.txt index dc2dbc18..b908d8c3 100644 --- a/examples/sample/assets/swap/spend/mainnet.txt +++ b/examples/sample/assets/swap/spend/mainnet.txt @@ -1 +1 @@ -addr1w8eyldeh4n25jfcaa7uya7cutcs0p0ra20lm8yvn5adapwcxnmsex \ No newline at end of file +addr1wx9rdt272hls3skwthqx39njaptkp7u0nq3n53rhhvtptecfls0j2 \ No newline at end of file diff --git a/examples/sample/assets/swap/spend/payment_script.json b/examples/sample/assets/swap/spend/payment_script.json index b109879c..190e4696 100644 --- a/examples/sample/assets/swap/spend/payment_script.json +++ b/examples/sample/assets/swap/spend/payment_script.json @@ -1,5 +1,5 @@ { "type": "PlutusScriptV2", "description": "Generated by Aiken", - "cborHex": "5905355905320100002105646174756d00210472646d7200210363747800320114636f6e7374725f6669656c645f6765745f61726700320115636f6e7374725f6669656c64735f6578706f73657200320101790032010c646174756d5f6669656c64730032010e646174756d5f6669656c645f736300320115646174756d5f6669656c645f73635f6669656c64730032011b646174756d5f6669656c645f73635f6669656c645f7369676e6572003201017800320122646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c647300320126646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c645f68617368003201016100320110646174756d5f6669656c645f72646d7200320101620032011b63686f6f73655f73616d706c655f52656465656d5f636f6e737472003330011b63686f6f73655f73616d706c655f52656465656d5f636f6e7374720001010162000213370e900124004266e1d200a48008810b636f6e7374725f646174610032010c636f6e7374725f696e64657800210f636f6e7374725f305f726573756c740021176c6173745f636f6e7374727563746f725f726573756c74005333573466e1d20000010c636f6e7374725f696e6465780003010f636f6e7374725f305f726573756c74000201176c6173745f636f6e7374727563746f725f726573756c740001373a6ea8010b636f6e7374725f6461746100010110646174756d5f6669656c645f72646d720001330114636f6e7374725f6669656c645f6765745f617267000b010c646174756d5f6669656c6473000848010126646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c645f686173680001330114636f6e7374725f6669656c645f6765745f61726700090122646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c6473000148000c0115636f6e7374725f6669656c64735f6578706f7365720007011b646174756d5f6669656c645f73635f6669656c645f7369676e65720002011b646174756d5f6669656c645f73635f6669656c645f7369676e65720001330114636f6e7374725f6669656c645f6765745f61726700060115646174756d5f6669656c645f73635f6669656c6473000148000c0115636f6e7374725f6669656c64735f6578706f7365720004010e646174756d5f6669656c645f73630001330114636f6e7374725f6669656c645f6765745f6172670004010c646174756d5f6669656c6473000148008c0115636f6e7374725f6669656c64735f6578706f73657200020105646174756d00064801090a636f6e7374725f7661720037586e78dd50010a636f6e7374725f7661720001210b636f6e7374725f6c69737400210a6172675f6e756d6265720032010772656375727365003330010772656375727365000101077265637572736500014800010b636f6e7374725f6c6973740003210d73656c665f7265637572736f7200211263757272656e745f6172675f6e756d6265720021136c6973745f6f665f636f6e7374725f61726773003333573466e1c10a6172675f6e756d6265720004011263757272656e745f6172675f6e756d62657200025742411b63757272656e745f6c6973745f6f665f636f6e7374725f61726773003330010d73656c665f7265637572736f720004010d73656c665f7265637572736f7200043370011263757272656e745f6172675f6e756d626572000348008d5d10011b63757272656e745f6c6973745f6f665f636f6e7374725f61726773000101136c6973745f6f665f636f6e7374725f61726773000101" + "cborHex": "5903495903460100002105646174756d00210472646d7200210363747800533357346514636f6e7374725f6669656c645f6765745f61726700320115636f6e7374725f6669656c64735f6578706f7365720032010c646174756d5f6669656c64730032010f646174756d5f6669656c645f66696e0032010161003201055f706970650032010c737761705f6164645f6f6e650032010a737761705f74776963650032010c737761705f6164645f74776f003201055f7069706500320110737761705f66696e616c5f636865636b00300110737761705f66696e616c5f636865636b000101055f70697065000221017a00337101017a000148020c010c737761705f6164645f74776f000101055f7069706500042101780033010a737761705f74776963650002010c737761705f6164645f6f6e6500030101780001210166002107696e697469616c003001016600023001016600020107696e697469616c0001210576616c7565003370010576616c7565000148008101610001010f646174756d5f6669656c645f66696e0001375a660114636f6e7374725f6669656c645f6765745f6172670003010c646174756d5f6669656c6473000148000c0115636f6e7374725f6669656c64735f6578706f73657200010105646174756d0005210a636f6e7374725f7661720037586e78dd50010a636f6e7374725f7661720001210b636f6e7374725f6c69737400210a6172675f6e756d6265720032010772656375727365003330010772656375727365000101077265637572736500014800010b636f6e7374725f6c6973740003210d73656c665f7265637572736f7200211263757272656e745f6172675f6e756d6265720021136c6973745f6f665f636f6e7374725f61726773003333573466e1c10a6172675f6e756d6265720004011263757272656e745f6172675f6e756d62657200025742411b63757272656e745f6c6973745f6f665f636f6e7374725f61726773003330010d73656c665f7265637572736f720004010d73656c665f7265637572736f7200043370011263757272656e745f6172675f6e756d626572000348008d5d10011b63757272656e745f6c6973745f6f665f636f6e7374725f61726773000101136c6973745f6f665f636f6e7374725f617267730001149859" } \ No newline at end of file diff --git a/examples/sample/assets/swap/spend/script.txt b/examples/sample/assets/swap/spend/script.txt index 56b6a82e..2f1de004 100644 --- a/examples/sample/assets/swap/spend/script.txt +++ b/examples/sample/assets/swap/spend/script.txt @@ -1 +1 @@ -5905320100002105646174756d00210472646d7200210363747800320114636f6e7374725f6669656c645f6765745f61726700320115636f6e7374725f6669656c64735f6578706f73657200320101790032010c646174756d5f6669656c64730032010e646174756d5f6669656c645f736300320115646174756d5f6669656c645f73635f6669656c64730032011b646174756d5f6669656c645f73635f6669656c645f7369676e6572003201017800320122646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c647300320126646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c645f68617368003201016100320110646174756d5f6669656c645f72646d7200320101620032011b63686f6f73655f73616d706c655f52656465656d5f636f6e737472003330011b63686f6f73655f73616d706c655f52656465656d5f636f6e7374720001010162000213370e900124004266e1d200a48008810b636f6e7374725f646174610032010c636f6e7374725f696e64657800210f636f6e7374725f305f726573756c740021176c6173745f636f6e7374727563746f725f726573756c74005333573466e1d20000010c636f6e7374725f696e6465780003010f636f6e7374725f305f726573756c74000201176c6173745f636f6e7374727563746f725f726573756c740001373a6ea8010b636f6e7374725f6461746100010110646174756d5f6669656c645f72646d720001330114636f6e7374725f6669656c645f6765745f617267000b010c646174756d5f6669656c6473000848010126646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c645f686173680001330114636f6e7374725f6669656c645f6765745f61726700090122646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c6473000148000c0115636f6e7374725f6669656c64735f6578706f7365720007011b646174756d5f6669656c645f73635f6669656c645f7369676e65720002011b646174756d5f6669656c645f73635f6669656c645f7369676e65720001330114636f6e7374725f6669656c645f6765745f61726700060115646174756d5f6669656c645f73635f6669656c6473000148000c0115636f6e7374725f6669656c64735f6578706f7365720004010e646174756d5f6669656c645f73630001330114636f6e7374725f6669656c645f6765745f6172670004010c646174756d5f6669656c6473000148008c0115636f6e7374725f6669656c64735f6578706f73657200020105646174756d00064801090a636f6e7374725f7661720037586e78dd50010a636f6e7374725f7661720001210b636f6e7374725f6c69737400210a6172675f6e756d6265720032010772656375727365003330010772656375727365000101077265637572736500014800010b636f6e7374725f6c6973740003210d73656c665f7265637572736f7200211263757272656e745f6172675f6e756d6265720021136c6973745f6f665f636f6e7374725f61726773003333573466e1c10a6172675f6e756d6265720004011263757272656e745f6172675f6e756d62657200025742411b63757272656e745f6c6973745f6f665f636f6e7374725f61726773003330010d73656c665f7265637572736f720004010d73656c665f7265637572736f7200043370011263757272656e745f6172675f6e756d626572000348008d5d10011b63757272656e745f6c6973745f6f665f636f6e7374725f61726773000101136c6973745f6f665f636f6e7374725f61726773000101 \ No newline at end of file +5903460100002105646174756d00210472646d7200210363747800533357346514636f6e7374725f6669656c645f6765745f61726700320115636f6e7374725f6669656c64735f6578706f7365720032010c646174756d5f6669656c64730032010f646174756d5f6669656c645f66696e0032010161003201055f706970650032010c737761705f6164645f6f6e650032010a737761705f74776963650032010c737761705f6164645f74776f003201055f7069706500320110737761705f66696e616c5f636865636b00300110737761705f66696e616c5f636865636b000101055f70697065000221017a00337101017a000148020c010c737761705f6164645f74776f000101055f7069706500042101780033010a737761705f74776963650002010c737761705f6164645f6f6e6500030101780001210166002107696e697469616c003001016600023001016600020107696e697469616c0001210576616c7565003370010576616c7565000148008101610001010f646174756d5f6669656c645f66696e0001375a660114636f6e7374725f6669656c645f6765745f6172670003010c646174756d5f6669656c6473000148000c0115636f6e7374725f6669656c64735f6578706f73657200010105646174756d0005210a636f6e7374725f7661720037586e78dd50010a636f6e7374725f7661720001210b636f6e7374725f6c69737400210a6172675f6e756d6265720032010772656375727365003330010772656375727365000101077265637572736500014800010b636f6e7374725f6c6973740003210d73656c665f7265637572736f7200211263757272656e745f6172675f6e756d6265720021136c6973745f6f665f636f6e7374725f61726773003333573466e1c10a6172675f6e756d6265720004011263757272656e745f6172675f6e756d62657200025742411b63757272656e745f6c6973745f6f665f636f6e7374725f61726773003330010d73656c665f7265637572736f720004010d73656c665f7265637572736f7200043370011263757272656e745f6172675f6e756d626572000348008d5d10011b63757272656e745f6c6973745f6f665f636f6e7374725f61726773000101136c6973745f6f665f636f6e7374725f617267730001149859 \ No newline at end of file diff --git a/examples/sample/assets/swap/spend/testnet.txt b/examples/sample/assets/swap/spend/testnet.txt index 9a84b959..1b72b4ab 100644 --- a/examples/sample/assets/swap/spend/testnet.txt +++ b/examples/sample/assets/swap/spend/testnet.txt @@ -1 +1 @@ -addr_test1wreyldeh4n25jfcaa7uya7cutcs0p0ra20lm8yvn5adapwcam0vkr \ No newline at end of file +addr_test1wz9rdt272hls3skwthqx39njaptkp7u0nq3n53rhhvtptecjhyna0 \ No newline at end of file