Skip to content
Snippets Groups Projects
Commit f0a4fa15 authored by Leander D's avatar Leander D
Browse files

all premade tests pass

parent 1473c0da
Branches main
No related merge requests found
......@@ -3,9 +3,106 @@ use logos::Logos;
#[derive(Logos, Debug, PartialEq)]
pub enum C1Token {
// TODO: Define variants and their token/regex
//// Tokens can be literal strings, of any length.
//#[token("fast")]
//Fast,
//// Or regular expressions.
//#[regex("[a-zA-Z]+")]
//Text,
#[token("bool")]
KwBoolean,
#[token("do")]
KwDo,
#[token("else")]
KwElse,
#[token("float")]
KwFloat,
#[token("for")]
KwFor,
#[token("if")]
KwIf,
#[token("int")]
KwInt,
#[token("printf")]
KwPrintf,
#[token("return")]
KwReturn,
#[token("void")]
KwVoid,
#[token("while")]
KwWhile,
#[token("+")]
Plus,
#[token("-")]
Minus,
#[token("*")]
Asterisk,
#[token("/")]
Slash,
#[token("=")]
Assign,
#[token("==")]
Eq,
#[token("!=")]
Neq,
#[token("<")]
Lss,
#[token(">")]
Grt,
#[token("<=")]
Leq,
#[token(">=")]
Geq,
#[token("&&")]
And,
#[token("||")]
Or,
#[token(",")]
Comma,
#[token(";")]
Semicolon,
#[token("(")]
LParen,
#[token(")")]
RParen,
#[token("{")]
LBrace,
#[token("}")]
RBrace,
#[regex("[0-9]+")]
ConstInt,
#[regex(r"[0-9]*\.[0-9]+([eE]([+-])?[0-9]+)?")]
#[regex("[0-9]+[eE]([+-])?[0-9]+")]
ConstFloat,
#[regex("true")]
#[regex("false")]
ConstBoolean,
#[regex("\"[^\\n\"]*\"")] // ???????????????
ConstString,
#[regex("([a-zA-Z])+([0-9]|[a-zA-Z])*")]
Id,
//#[regex("[0-9]")]
//DIGIT,
//#[regex("[0-9]+")]
//INTEGER,
//#[regex("[0-9]+ \".\" [0-9]+ | \".\" [0-9]+")]
//FLOAT,
//#[regex("[a-zA-Z]")]
//LETTER,
#[regex(r"\s", logos::skip)]
#[regex(r"/\*([^*])*\*/", logos::skip)] //
#[regex("//[^\\n]*", logos::skip)]
Ignore,
// Logos requires one token variant to handle errors,
// it can be named anything you wish.
#[error]
Error,
// Logos requires one token variant to handle errors,
// it can be named anything you wish.
}
......@@ -27,9 +27,15 @@ impl Display for LinkText {
#[derive(Logos, Debug, PartialEq)]
pub enum URLToken {
// TODO: Capture link definitions
//wasnt able to look for href="[^"]" even with escape char, so href= must do the trick
#[regex(r"<a[^>]+href=[^>]*>[^<]*</a(\s)*>", extract_link_info)]//<a[^>]*>[^<]*</a[^>]*>
Link((LinkUrl, LinkText)),
// TODO: Ignore all characters that do not belong to a link definition
//#[regex("", logos::skip)] //<[^a][^*]*>[^(<a)]*
#[regex("((<[^a])|[^<])*", logos::skip)]
//this works because it has a lower priority i guess...
#[regex("<a[^>]*>", logos::skip)]
Ignored,
// Catch any error
......@@ -40,5 +46,35 @@ pub enum URLToken {
/// Extracts the URL and text from a string that matched a Link token
fn extract_link_info(lex: &mut Lexer<URLToken>) -> (LinkUrl, LinkText) {
// TODO: Implement extraction from link definition
todo!()
//println!("{}", lex.slice());
let mut s = String::from(lex.slice());
// this is sooo dirty, but i cant code in rust... :/
let pos = s.find("href=");
match pos {
None => (),
Some(p) => s = s[p+6..].to_string(),
}
let pos = s.find("\"");
let mut url = String::from("");
match pos {
None => (),
Some(p) => url.push_str(&s[..p].to_string()),
}
let pos = s.find(">");
match pos {
None => (),
Some(p) => s = s[p+1..].to_string(),
}
let pos = s.find("<");
let mut text = String::from("");
match pos {
None => (),
Some(p) => text.push_str(&s[..p].to_string()),
}
//println!("{}", s);
//println!("{}", url);
//println!("{}", text);
(LinkUrl(String::from(url)),LinkText(String::from(text)))
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment