feat: some parsing for comments

This commit is contained in:
rvcas 2022-11-16 11:16:45 -05:00 committed by Lucas
parent 00e5f99304
commit f7313ee61a
6 changed files with 40 additions and 31 deletions

View File

@ -47,7 +47,8 @@ pub fn module(
false false
} }
Token::EmptyLine => { Token::EmptyLine => {
extra.empty_lines.push(span.end); println!("{:?}", span);
extra.empty_lines.push(span.start);
false false
} }

View File

@ -5,7 +5,7 @@ use crate::ast::Span;
use super::{error::ParseError, token::Token}; use super::{error::ParseError, token::Token};
pub fn lexer() -> impl Parser<char, Vec<(Token, Span)>, Error = ParseError> { pub fn lexer() -> impl Parser<char, Vec<(Token, Span)>, 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(( let op = choice((
just("==").to(Token::EqualEqual), just("==").to(Token::EqualEqual),
@ -30,6 +30,7 @@ pub fn lexer() -> impl Parser<char, Vec<(Token, Span)>, Error = ParseError> {
just("||").to(Token::VbarVbar), just("||").to(Token::VbarVbar),
just('|').to(Token::Vbar), just('|').to(Token::Vbar),
just("&&").to(Token::AmperAmper), just("&&").to(Token::AmperAmper),
just("\n\n").to(Token::EmptyLine),
)); ));
let grouping = choice(( let grouping = choice((
@ -95,7 +96,27 @@ pub fn lexer() -> impl Parser<char, Vec<(Token, Span)>, Error = ParseError> {
} }
}); });
let token = choice((keyword, int, op, grouping, string)) 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("//")
.ignore_then(take_until(text::newline()))
.to(Token::Comment);
choice((
module_comments,
doc_comments,
comments,
keyword,
int,
op,
grouping,
string,
))
.or(any().map(Token::Error).validate(|t, span, emit| { .or(any().map(Token::Error).validate(|t, span, emit| {
emit(ParseError::expected_input_found( emit(ParseError::expected_input_found(
span, span,
@ -106,20 +127,7 @@ pub fn lexer() -> impl Parser<char, Vec<(Token, Span)>, Error = ParseError> {
})) }))
.map_with_span(move |token, span| (token, span)) .map_with_span(move |token, span| (token, span))
.padded() .padded()
.recover_with(skip_then_retry_until([])); .recover_with(skip_then_retry_until([]))
let comments = just("//")
.then_ignore(
just('(')
.ignore_then(take_until(just(")#")).ignored())
.or(none_of('\n').ignored().repeated().ignored()),
)
.padded()
.ignored()
.repeated();
token
.padded_by(comments)
.repeated() .repeated()
.padded() .padded()
.then_ignore(end()) .then_ignore(end())

View File

@ -1 +1 @@
addr1w8eyldeh4n25jfcaa7uya7cutcs0p0ra20lm8yvn5adapwcxnmsex addr1wx9rdt272hls3skwthqx39njaptkp7u0nq3n53rhhvtptecfls0j2

View File

@ -1,5 +1,5 @@
{ {
"type": "PlutusScriptV2", "type": "PlutusScriptV2",
"description": "Generated by Aiken", "description": "Generated by Aiken",
"cborHex": "5905355905320100002105646174756d00210472646d7200210363747800320114636f6e7374725f6669656c645f6765745f61726700320115636f6e7374725f6669656c64735f6578706f73657200320101790032010c646174756d5f6669656c64730032010e646174756d5f6669656c645f736300320115646174756d5f6669656c645f73635f6669656c64730032011b646174756d5f6669656c645f73635f6669656c645f7369676e6572003201017800320122646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c647300320126646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c645f68617368003201016100320110646174756d5f6669656c645f72646d7200320101620032011b63686f6f73655f73616d706c655f52656465656d5f636f6e737472003330011b63686f6f73655f73616d706c655f52656465656d5f636f6e7374720001010162000213370e900124004266e1d200a48008810b636f6e7374725f646174610032010c636f6e7374725f696e64657800210f636f6e7374725f305f726573756c740021176c6173745f636f6e7374727563746f725f726573756c74005333573466e1d20000010c636f6e7374725f696e6465780003010f636f6e7374725f305f726573756c74000201176c6173745f636f6e7374727563746f725f726573756c740001373a6ea8010b636f6e7374725f6461746100010110646174756d5f6669656c645f72646d720001330114636f6e7374725f6669656c645f6765745f617267000b010c646174756d5f6669656c6473000848010126646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c645f686173680001330114636f6e7374725f6669656c645f6765745f61726700090122646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c6473000148000c0115636f6e7374725f6669656c64735f6578706f7365720007011b646174756d5f6669656c645f73635f6669656c645f7369676e65720002011b646174756d5f6669656c645f73635f6669656c645f7369676e65720001330114636f6e7374725f6669656c645f6765745f61726700060115646174756d5f6669656c645f73635f6669656c6473000148000c0115636f6e7374725f6669656c64735f6578706f7365720004010e646174756d5f6669656c645f73630001330114636f6e7374725f6669656c645f6765745f6172670004010c646174756d5f6669656c6473000148008c0115636f6e7374725f6669656c64735f6578706f73657200020105646174756d00064801090a636f6e7374725f7661720037586e78dd50010a636f6e7374725f7661720001210b636f6e7374725f6c69737400210a6172675f6e756d6265720032010772656375727365003330010772656375727365000101077265637572736500014800010b636f6e7374725f6c6973740003210d73656c665f7265637572736f7200211263757272656e745f6172675f6e756d6265720021136c6973745f6f665f636f6e7374725f61726773003333573466e1c10a6172675f6e756d6265720004011263757272656e745f6172675f6e756d62657200025742411b63757272656e745f6c6973745f6f665f636f6e7374725f61726773003330010d73656c665f7265637572736f720004010d73656c665f7265637572736f7200043370011263757272656e745f6172675f6e756d626572000348008d5d10011b63757272656e745f6c6973745f6f665f636f6e7374725f61726773000101136c6973745f6f665f636f6e7374725f61726773000101" "cborHex": "5903495903460100002105646174756d00210472646d7200210363747800533357346514636f6e7374725f6669656c645f6765745f61726700320115636f6e7374725f6669656c64735f6578706f7365720032010c646174756d5f6669656c64730032010f646174756d5f6669656c645f66696e0032010161003201055f706970650032010c737761705f6164645f6f6e650032010a737761705f74776963650032010c737761705f6164645f74776f003201055f7069706500320110737761705f66696e616c5f636865636b00300110737761705f66696e616c5f636865636b000101055f70697065000221017a00337101017a000148020c010c737761705f6164645f74776f000101055f7069706500042101780033010a737761705f74776963650002010c737761705f6164645f6f6e6500030101780001210166002107696e697469616c003001016600023001016600020107696e697469616c0001210576616c7565003370010576616c7565000148008101610001010f646174756d5f6669656c645f66696e0001375a660114636f6e7374725f6669656c645f6765745f6172670003010c646174756d5f6669656c6473000148000c0115636f6e7374725f6669656c64735f6578706f73657200010105646174756d0005210a636f6e7374725f7661720037586e78dd50010a636f6e7374725f7661720001210b636f6e7374725f6c69737400210a6172675f6e756d6265720032010772656375727365003330010772656375727365000101077265637572736500014800010b636f6e7374725f6c6973740003210d73656c665f7265637572736f7200211263757272656e745f6172675f6e756d6265720021136c6973745f6f665f636f6e7374725f61726773003333573466e1c10a6172675f6e756d6265720004011263757272656e745f6172675f6e756d62657200025742411b63757272656e745f6c6973745f6f665f636f6e7374725f61726773003330010d73656c665f7265637572736f720004010d73656c665f7265637572736f7200043370011263757272656e745f6172675f6e756d626572000348008d5d10011b63757272656e745f6c6973745f6f665f636f6e7374725f61726773000101136c6973745f6f665f636f6e7374725f617267730001149859"
} }

View File

@ -1 +1 @@
5905320100002105646174756d00210472646d7200210363747800320114636f6e7374725f6669656c645f6765745f61726700320115636f6e7374725f6669656c64735f6578706f73657200320101790032010c646174756d5f6669656c64730032010e646174756d5f6669656c645f736300320115646174756d5f6669656c645f73635f6669656c64730032011b646174756d5f6669656c645f73635f6669656c645f7369676e6572003201017800320122646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c647300320126646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c645f68617368003201016100320110646174756d5f6669656c645f72646d7200320101620032011b63686f6f73655f73616d706c655f52656465656d5f636f6e737472003330011b63686f6f73655f73616d706c655f52656465656d5f636f6e7374720001010162000213370e900124004266e1d200a48008810b636f6e7374725f646174610032010c636f6e7374725f696e64657800210f636f6e7374725f305f726573756c740021176c6173745f636f6e7374727563746f725f726573756c74005333573466e1d20000010c636f6e7374725f696e6465780003010f636f6e7374725f305f726573756c74000201176c6173745f636f6e7374727563746f725f726573756c740001373a6ea8010b636f6e7374725f6461746100010110646174756d5f6669656c645f72646d720001330114636f6e7374725f6669656c645f6765745f617267000b010c646174756d5f6669656c6473000848010126646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c645f686173680001330114636f6e7374725f6669656c645f6765745f61726700090122646174756d5f6669656c645f73635f6669656c645f7369676e65725f6669656c6473000148000c0115636f6e7374725f6669656c64735f6578706f7365720007011b646174756d5f6669656c645f73635f6669656c645f7369676e65720002011b646174756d5f6669656c645f73635f6669656c645f7369676e65720001330114636f6e7374725f6669656c645f6765745f61726700060115646174756d5f6669656c645f73635f6669656c6473000148000c0115636f6e7374725f6669656c64735f6578706f7365720004010e646174756d5f6669656c645f73630001330114636f6e7374725f6669656c645f6765745f6172670004010c646174756d5f6669656c6473000148008c0115636f6e7374725f6669656c64735f6578706f73657200020105646174756d00064801090a636f6e7374725f7661720037586e78dd50010a636f6e7374725f7661720001210b636f6e7374725f6c69737400210a6172675f6e756d6265720032010772656375727365003330010772656375727365000101077265637572736500014800010b636f6e7374725f6c6973740003210d73656c665f7265637572736f7200211263757272656e745f6172675f6e756d6265720021136c6973745f6f665f636f6e7374725f61726773003333573466e1c10a6172675f6e756d6265720004011263757272656e745f6172675f6e756d62657200025742411b63757272656e745f6c6973745f6f665f636f6e7374725f61726773003330010d73656c665f7265637572736f720004010d73656c665f7265637572736f7200043370011263757272656e745f6172675f6e756d626572000348008d5d10011b63757272656e745f6c6973745f6f665f636f6e7374725f61726773000101136c6973745f6f665f636f6e7374725f61726773000101 5903460100002105646174756d00210472646d7200210363747800533357346514636f6e7374725f6669656c645f6765745f61726700320115636f6e7374725f6669656c64735f6578706f7365720032010c646174756d5f6669656c64730032010f646174756d5f6669656c645f66696e0032010161003201055f706970650032010c737761705f6164645f6f6e650032010a737761705f74776963650032010c737761705f6164645f74776f003201055f7069706500320110737761705f66696e616c5f636865636b00300110737761705f66696e616c5f636865636b000101055f70697065000221017a00337101017a000148020c010c737761705f6164645f74776f000101055f7069706500042101780033010a737761705f74776963650002010c737761705f6164645f6f6e6500030101780001210166002107696e697469616c003001016600023001016600020107696e697469616c0001210576616c7565003370010576616c7565000148008101610001010f646174756d5f6669656c645f66696e0001375a660114636f6e7374725f6669656c645f6765745f6172670003010c646174756d5f6669656c6473000148000c0115636f6e7374725f6669656c64735f6578706f73657200010105646174756d0005210a636f6e7374725f7661720037586e78dd50010a636f6e7374725f7661720001210b636f6e7374725f6c69737400210a6172675f6e756d6265720032010772656375727365003330010772656375727365000101077265637572736500014800010b636f6e7374725f6c6973740003210d73656c665f7265637572736f7200211263757272656e745f6172675f6e756d6265720021136c6973745f6f665f636f6e7374725f61726773003333573466e1c10a6172675f6e756d6265720004011263757272656e745f6172675f6e756d62657200025742411b63757272656e745f6c6973745f6f665f636f6e7374725f61726773003330010d73656c665f7265637572736f720004010d73656c665f7265637572736f7200043370011263757272656e745f6172675f6e756d626572000348008d5d10011b63757272656e745f6c6973745f6f665f636f6e7374725f61726773000101136c6973745f6f665f636f6e7374725f617267730001149859

View File

@ -1 +1 @@
addr_test1wreyldeh4n25jfcaa7uya7cutcs0p0ra20lm8yvn5adapwcam0vkr addr_test1wz9rdt272hls3skwthqx39njaptkp7u0nq3n53rhhvtptecjhyna0