improved some things

This commit is contained in:
Shautvast 2025-01-06 22:14:57 +01:00
parent b3ed4b3254
commit 204467cba2
2 changed files with 13 additions and 13 deletions

View file

@ -1,9 +1,9 @@
vis: markup | styles
markup: nodes
markup: "markup:" nodes
elements: "{" element* "}"
element: node | edge
node: (id (":" title)? nodes?) | edgenode
edge: idref arrow idref
edge: from_id arrow to_id title?
arrow: ArrowLeft | ArrowRight | DiamondArrowLeft | DiamondArrowRight
ArrowLeft: "<--"
ArrowRight: "-->"
@ -14,7 +14,7 @@ title: string
string: """ text """
styles: style*
styles: "styles" "{" style* "}"
style: idref attributes? ":" style-elements
style-elements: "{" style-element "}"
style-element: key ":" value

View file

@ -9,7 +9,7 @@ use anyhow::anyhow;
pub fn parse_vis(contents: &str) -> anyhow::Result<Vis> {
let tokens = crate::scanner::scan(contents)?;
println!("{:?}", tokens);
// println!("{:?}", tokens);
let mut parser = Parser::new(tokens);
Ok(Vis {
@ -30,26 +30,26 @@ impl Parser {
fn markup(&mut self) -> anyhow::Result<Vec<Element>> {
if self.match_token(Markup) {
self.nodes()
self.elements()
} else {
Ok(vec![])
}
}
fn nodes(&mut self) -> anyhow::Result<Vec<Element>> {
println!("nodes {:?}", self.peek());
fn elements(&mut self) -> anyhow::Result<Vec<Element>> {
// println!("nodes {:?}", self.peek());
self.consume(LeftBrace, "Expected '{'")?;
let mut nodes = vec![];
while !self.match_token(RightBrace) {
nodes.push(self.node()?);
nodes.push(self.element()?);
}
Ok(nodes)
}
fn node(&mut self) -> anyhow::Result<Element> {
println!("node {:?}", self.peek());
fn element(&mut self) -> anyhow::Result<Element> {
// println!("node {:?}", self.peek());
let id = self.id()?;
println!("id {}", id);
// println!("id {}", id);
let current = self.peek().clone();
if self.match_tokens(vec![
ArrowRight,
@ -60,9 +60,9 @@ impl Parser {
self.edge(id, current)
} else {
let title = self.title()?;
println!("title {:?}", title);
// println!("title {:?}", title);
let children = if self.check(&LeftBrace) {
self.nodes()?
self.elements()?
} else {
vec![]
};