Add statment_kind syntax node
This commit is contained in:
parent
1ce2178af5
commit
9f2b0461df
@ -6,39 +6,56 @@ use crate::{
|
||||
Match, SyntaxNode, Type, TypeDefinition, Value, While,
|
||||
};
|
||||
|
||||
/// Abstract representation of a statement.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, PartialOrd, Ord)]
|
||||
pub struct Statement {
|
||||
is_return: bool,
|
||||
statement_inner: StatementInner,
|
||||
statement_inner: StatementKind,
|
||||
}
|
||||
|
||||
impl AbstractTree for Statement {
|
||||
fn from_syntax(node: SyntaxNode, source: &str, context: &Context) -> Result<Self, SyntaxError> {
|
||||
todo!()
|
||||
fn from_syntax(
|
||||
node: SyntaxNode,
|
||||
source: &str,
|
||||
_context: &Context,
|
||||
) -> Result<Self, SyntaxError> {
|
||||
SyntaxError::expect_syntax_node(source, "statement", node)?;
|
||||
|
||||
let first_child = node.child(0).unwrap();
|
||||
let is_return = first_child.kind() == "return";
|
||||
let child = if is_return {
|
||||
node.child(1).unwrap()
|
||||
} else {
|
||||
first_child
|
||||
};
|
||||
|
||||
Ok(Statement {
|
||||
is_return,
|
||||
statement_inner: StatementKind::from_syntax(child, source, _context)?,
|
||||
})
|
||||
}
|
||||
|
||||
fn expected_type(&self, context: &Context) -> Result<Type, ValidationError> {
|
||||
todo!()
|
||||
fn expected_type(&self, _context: &Context) -> Result<Type, ValidationError> {
|
||||
self.statement_inner.expected_type(_context)
|
||||
}
|
||||
|
||||
fn validate(&self, source: &str, context: &Context) -> Result<(), ValidationError> {
|
||||
todo!()
|
||||
fn validate(&self, _source: &str, _context: &Context) -> Result<(), ValidationError> {
|
||||
self.statement_inner.validate(_source, _context)
|
||||
}
|
||||
|
||||
fn run(&self, source: &str, context: &Context) -> Result<Value, RuntimeError> {
|
||||
todo!()
|
||||
fn run(&self, _source: &str, _context: &Context) -> Result<Value, RuntimeError> {
|
||||
self.statement_inner.run(_source, _context)
|
||||
}
|
||||
}
|
||||
|
||||
impl Format for Statement {
|
||||
fn format(&self, output: &mut String, indent_level: u8) {
|
||||
todo!()
|
||||
fn format(&self, _output: &mut String, _indent_level: u8) {
|
||||
self.statement_inner.format(_output, _indent_level)
|
||||
}
|
||||
}
|
||||
|
||||
/// Abstract representation of a statement.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, PartialOrd, Ord)]
|
||||
pub enum StatementInner {
|
||||
enum StatementKind {
|
||||
Assignment(Box<Assignment>),
|
||||
Expression(Expression),
|
||||
IfElse(Box<IfElse>),
|
||||
@ -50,38 +67,38 @@ pub enum StatementInner {
|
||||
TypeDefinition(TypeDefinition),
|
||||
}
|
||||
|
||||
impl AbstractTree for StatementInner {
|
||||
impl AbstractTree for StatementKind {
|
||||
fn from_syntax(node: SyntaxNode, source: &str, context: &Context) -> Result<Self, SyntaxError> {
|
||||
SyntaxError::expect_syntax_node(source, "statement", node)?;
|
||||
SyntaxError::expect_syntax_node(source, "statement_kind", node)?;
|
||||
|
||||
let child = node.child(0).unwrap();
|
||||
|
||||
match child.kind() {
|
||||
"assignment" => Ok(StatementInner::Assignment(Box::new(
|
||||
"assignment" => Ok(StatementKind::Assignment(Box::new(
|
||||
Assignment::from_syntax(child, source, context)?,
|
||||
))),
|
||||
"expression" => Ok(StatementInner::Expression(Expression::from_syntax(
|
||||
"expression" => Ok(StatementKind::Expression(Expression::from_syntax(
|
||||
child, source, context,
|
||||
)?)),
|
||||
"if_else" => Ok(StatementInner::IfElse(Box::new(IfElse::from_syntax(
|
||||
"if_else" => Ok(StatementKind::IfElse(Box::new(IfElse::from_syntax(
|
||||
child, source, context,
|
||||
)?))),
|
||||
"while" => Ok(StatementInner::While(Box::new(While::from_syntax(
|
||||
"while" => Ok(StatementKind::While(Box::new(While::from_syntax(
|
||||
child, source, context,
|
||||
)?))),
|
||||
"block" => Ok(StatementInner::Block(Box::new(Block::from_syntax(
|
||||
"block" => Ok(StatementKind::Block(Box::new(Block::from_syntax(
|
||||
child, source, context,
|
||||
)?))),
|
||||
"for" => Ok(StatementInner::For(Box::new(For::from_syntax(
|
||||
"for" => Ok(StatementKind::For(Box::new(For::from_syntax(
|
||||
child, source, context,
|
||||
)?))),
|
||||
"index_assignment" => Ok(StatementInner::IndexAssignment(Box::new(
|
||||
"index_assignment" => Ok(StatementKind::IndexAssignment(Box::new(
|
||||
IndexAssignment::from_syntax(child, source, context)?,
|
||||
))),
|
||||
"match" => Ok(StatementInner::Match(Match::from_syntax(
|
||||
"match" => Ok(StatementKind::Match(Match::from_syntax(
|
||||
child, source, context,
|
||||
)?)),
|
||||
"type_definition" => Ok(StatementInner::TypeDefinition(TypeDefinition::from_syntax(
|
||||
"type_definition" => Ok(StatementKind::TypeDefinition(TypeDefinition::from_syntax(
|
||||
child, source, context
|
||||
)?)),
|
||||
_ => Err(SyntaxError::UnexpectedSyntaxNode {
|
||||
@ -96,17 +113,17 @@ impl AbstractTree for StatementInner {
|
||||
|
||||
fn expected_type(&self, _context: &Context) -> Result<Type, ValidationError> {
|
||||
match self {
|
||||
StatementInner::Assignment(assignment) => assignment.expected_type(_context),
|
||||
StatementInner::Expression(expression) => expression.expected_type(_context),
|
||||
StatementInner::IfElse(if_else) => if_else.expected_type(_context),
|
||||
StatementInner::Match(r#match) => r#match.expected_type(_context),
|
||||
StatementInner::While(r#while) => r#while.expected_type(_context),
|
||||
StatementInner::Block(block) => block.expected_type(_context),
|
||||
StatementInner::For(r#for) => r#for.expected_type(_context),
|
||||
StatementInner::IndexAssignment(index_assignment) => {
|
||||
StatementKind::Assignment(assignment) => assignment.expected_type(_context),
|
||||
StatementKind::Expression(expression) => expression.expected_type(_context),
|
||||
StatementKind::IfElse(if_else) => if_else.expected_type(_context),
|
||||
StatementKind::Match(r#match) => r#match.expected_type(_context),
|
||||
StatementKind::While(r#while) => r#while.expected_type(_context),
|
||||
StatementKind::Block(block) => block.expected_type(_context),
|
||||
StatementKind::For(r#for) => r#for.expected_type(_context),
|
||||
StatementKind::IndexAssignment(index_assignment) => {
|
||||
index_assignment.expected_type(_context)
|
||||
}
|
||||
StatementInner::TypeDefinition(type_definition) => {
|
||||
StatementKind::TypeDefinition(type_definition) => {
|
||||
type_definition.expected_type(_context)
|
||||
}
|
||||
}
|
||||
@ -114,17 +131,17 @@ impl AbstractTree for StatementInner {
|
||||
|
||||
fn validate(&self, _source: &str, _context: &Context) -> Result<(), ValidationError> {
|
||||
match self {
|
||||
StatementInner::Assignment(assignment) => assignment.validate(_source, _context),
|
||||
StatementInner::Expression(expression) => expression.validate(_source, _context),
|
||||
StatementInner::IfElse(if_else) => if_else.validate(_source, _context),
|
||||
StatementInner::Match(r#match) => r#match.validate(_source, _context),
|
||||
StatementInner::While(r#while) => r#while.validate(_source, _context),
|
||||
StatementInner::Block(block) => block.validate(_source, _context),
|
||||
StatementInner::For(r#for) => r#for.validate(_source, _context),
|
||||
StatementInner::IndexAssignment(index_assignment) => {
|
||||
StatementKind::Assignment(assignment) => assignment.validate(_source, _context),
|
||||
StatementKind::Expression(expression) => expression.validate(_source, _context),
|
||||
StatementKind::IfElse(if_else) => if_else.validate(_source, _context),
|
||||
StatementKind::Match(r#match) => r#match.validate(_source, _context),
|
||||
StatementKind::While(r#while) => r#while.validate(_source, _context),
|
||||
StatementKind::Block(block) => block.validate(_source, _context),
|
||||
StatementKind::For(r#for) => r#for.validate(_source, _context),
|
||||
StatementKind::IndexAssignment(index_assignment) => {
|
||||
index_assignment.validate(_source, _context)
|
||||
}
|
||||
StatementInner::TypeDefinition(type_definition) => {
|
||||
StatementKind::TypeDefinition(type_definition) => {
|
||||
type_definition.validate(_source, _context)
|
||||
}
|
||||
}
|
||||
@ -132,39 +149,39 @@ impl AbstractTree for StatementInner {
|
||||
|
||||
fn run(&self, _source: &str, _context: &Context) -> Result<Value, RuntimeError> {
|
||||
match self {
|
||||
StatementInner::Assignment(assignment) => assignment.run(_source, _context),
|
||||
StatementInner::Expression(expression) => expression.run(_source, _context),
|
||||
StatementInner::IfElse(if_else) => if_else.run(_source, _context),
|
||||
StatementInner::Match(r#match) => r#match.run(_source, _context),
|
||||
StatementInner::While(r#while) => r#while.run(_source, _context),
|
||||
StatementInner::Block(block) => block.run(_source, _context),
|
||||
StatementInner::For(r#for) => r#for.run(_source, _context),
|
||||
StatementInner::IndexAssignment(index_assignment) => {
|
||||
StatementKind::Assignment(assignment) => assignment.run(_source, _context),
|
||||
StatementKind::Expression(expression) => expression.run(_source, _context),
|
||||
StatementKind::IfElse(if_else) => if_else.run(_source, _context),
|
||||
StatementKind::Match(r#match) => r#match.run(_source, _context),
|
||||
StatementKind::While(r#while) => r#while.run(_source, _context),
|
||||
StatementKind::Block(block) => block.run(_source, _context),
|
||||
StatementKind::For(r#for) => r#for.run(_source, _context),
|
||||
StatementKind::IndexAssignment(index_assignment) => {
|
||||
index_assignment.run(_source, _context)
|
||||
}
|
||||
StatementInner::TypeDefinition(type_definition) => {
|
||||
StatementKind::TypeDefinition(type_definition) => {
|
||||
type_definition.run(_source, _context)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Format for StatementInner {
|
||||
impl Format for StatementKind {
|
||||
fn format(&self, output: &mut String, indent_level: u8) {
|
||||
StatementInner::indent(output, indent_level);
|
||||
StatementKind::indent(output, indent_level);
|
||||
|
||||
match self {
|
||||
StatementInner::Assignment(assignment) => assignment.format(output, indent_level),
|
||||
StatementInner::Expression(expression) => expression.format(output, indent_level),
|
||||
StatementInner::IfElse(if_else) => if_else.format(output, indent_level),
|
||||
StatementInner::Match(r#match) => r#match.format(output, indent_level),
|
||||
StatementInner::While(r#while) => r#while.format(output, indent_level),
|
||||
StatementInner::Block(block) => block.format(output, indent_level),
|
||||
StatementInner::For(r#for) => r#for.format(output, indent_level),
|
||||
StatementInner::IndexAssignment(index_assignment) => {
|
||||
StatementKind::Assignment(assignment) => assignment.format(output, indent_level),
|
||||
StatementKind::Expression(expression) => expression.format(output, indent_level),
|
||||
StatementKind::IfElse(if_else) => if_else.format(output, indent_level),
|
||||
StatementKind::Match(r#match) => r#match.format(output, indent_level),
|
||||
StatementKind::While(r#while) => r#while.format(output, indent_level),
|
||||
StatementKind::Block(block) => block.format(output, indent_level),
|
||||
StatementKind::For(r#for) => r#for.format(output, indent_level),
|
||||
StatementKind::IndexAssignment(index_assignment) => {
|
||||
index_assignment.format(output, indent_level)
|
||||
}
|
||||
StatementInner::TypeDefinition(type_definition) => {
|
||||
StatementKind::TypeDefinition(type_definition) => {
|
||||
type_definition.format(output, indent_level)
|
||||
}
|
||||
}
|
||||
|
@ -149,14 +149,10 @@ impl Interpreter {
|
||||
|
||||
check_for_error(root, source, &mut cursor)?;
|
||||
|
||||
println!("abstracting...");
|
||||
|
||||
let abstract_tree = Root::from_syntax(syntax_tree.root_node(), source, &self.context)?;
|
||||
|
||||
abstract_tree.validate(source, &self.context)?;
|
||||
|
||||
println!("{abstract_tree:?}");
|
||||
|
||||
Ok(abstract_tree)
|
||||
}
|
||||
|
||||
|
@ -8,12 +8,13 @@ Simple As
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(as
|
||||
(expression
|
||||
(value
|
||||
(integer)))
|
||||
(type)))))
|
||||
(type))))))
|
||||
|
||||
================================================================================
|
||||
As Function
|
||||
@ -25,13 +26,14 @@ foo as (int) -> int
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(as
|
||||
(expression
|
||||
(identifier))
|
||||
(type
|
||||
(type)
|
||||
(type))))))
|
||||
(type)))))))
|
||||
|
||||
================================================================================
|
||||
As List in For Loop
|
||||
@ -43,6 +45,7 @@ for i in foobar as [string] {}
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(for
|
||||
(identifier)
|
||||
(expression
|
||||
@ -52,4 +55,4 @@ for i in foobar as [string] {}
|
||||
(type
|
||||
(type
|
||||
(identifier)))))
|
||||
(block))))
|
||||
(block)))))
|
||||
|
@ -8,12 +8,14 @@ x = y
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(assignment
|
||||
(identifier)
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier))))))
|
||||
(identifier))))))))
|
||||
|
||||
================================================================================
|
||||
Simple Assignment with Type
|
||||
@ -25,14 +27,16 @@ x <int> = y
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(assignment
|
||||
(identifier)
|
||||
(type_specification
|
||||
(type))
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier))))))
|
||||
(identifier))))))))
|
||||
|
||||
================================================================================
|
||||
Map Item Assignment
|
||||
@ -44,6 +48,7 @@ x:y = 1
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(index_assignment
|
||||
(index
|
||||
(index_expression
|
||||
@ -52,9 +57,10 @@ x:y = 1
|
||||
(identifier)))
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer)))))))
|
||||
(integer)))))))))
|
||||
|
||||
================================================================================
|
||||
List Item Assignment
|
||||
@ -66,6 +72,7 @@ x:9 = 'foobar'
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(index_assignment
|
||||
(index
|
||||
(index_expression
|
||||
@ -75,6 +82,7 @@ x:9 = 'foobar'
|
||||
(integer))))
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string)))))))
|
||||
(string)))))))))
|
||||
|
@ -8,15 +8,17 @@ async { output ('Whaddup') }
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(function_call
|
||||
(function_expression
|
||||
(identifier))
|
||||
(expression
|
||||
(value
|
||||
(string)))))))))
|
||||
(string)))))))))))
|
||||
|
||||
================================================================================
|
||||
Complex Async Statements
|
||||
@ -36,8 +38,10 @@ async {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(if_else
|
||||
(if
|
||||
(expression
|
||||
@ -57,16 +61,19 @@ async {
|
||||
(integer)))))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(boolean))))))
|
||||
(boolean)))))))
|
||||
(else
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(boolean))))))))
|
||||
(boolean))))))))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string)))))))
|
||||
(string)))))))))
|
||||
|
@ -10,15 +10,17 @@ Simple Block
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(function_call
|
||||
(function_expression
|
||||
(identifier))
|
||||
(expression
|
||||
(value
|
||||
(integer)))))))))
|
||||
(integer)))))))))))
|
||||
|
||||
================================================================================
|
||||
Block with Return
|
||||
@ -34,16 +36,20 @@ Block with Return
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer))))
|
||||
(integer)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer))))
|
||||
(integer)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer)))))))
|
||||
(integer)))))))))
|
||||
|
@ -8,9 +8,10 @@ Simple Command
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(command
|
||||
(command_text)))))
|
||||
(command_text))))))
|
||||
|
||||
================================================================================
|
||||
Command Sequence
|
||||
@ -22,13 +23,15 @@ Command Sequence
|
||||
|
||||
(root
|
||||
(statement
|
||||
(expression
|
||||
(command
|
||||
(command_text))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(command
|
||||
(command_text)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(command
|
||||
(command_text))))))
|
||||
|
||||
================================================================================
|
||||
Command with Arguments
|
||||
@ -40,11 +43,12 @@ Command with Arguments
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(command
|
||||
(command_text)
|
||||
(command_argument)
|
||||
(command_argument)))))
|
||||
(command_argument))))))
|
||||
|
||||
================================================================================
|
||||
Command Sequence with Arguments
|
||||
@ -57,19 +61,21 @@ Command Sequence with Arguments
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(command
|
||||
(command_text)
|
||||
(command_argument)
|
||||
(command_argument)
|
||||
(command_argument)
|
||||
(command_argument))))
|
||||
(statement
|
||||
(expression
|
||||
(command
|
||||
(command_text)
|
||||
(command_argument)
|
||||
(command_argument)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(command
|
||||
(command_text)
|
||||
(command_argument)
|
||||
(command_argument))))))
|
||||
|
||||
================================================================================
|
||||
Command Sequence with Arguments
|
||||
@ -82,19 +88,21 @@ Command Sequence with Arguments
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(command
|
||||
(command_text)
|
||||
(command_argument)
|
||||
(command_argument)
|
||||
(command_argument)
|
||||
(command_argument))))
|
||||
(statement
|
||||
(expression
|
||||
(command
|
||||
(command_text)
|
||||
(command_argument)
|
||||
(command_argument)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(command
|
||||
(command_text)
|
||||
(command_argument)
|
||||
(command_argument))))))
|
||||
|
||||
================================================================================
|
||||
Command Assignment
|
||||
@ -107,24 +115,28 @@ cat_output = ^cat Cargo.toml;
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(assignment
|
||||
(identifier)
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(command
|
||||
(command_text)
|
||||
(command_argument)
|
||||
(command_argument))))))
|
||||
(command_argument))))))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(assignment
|
||||
(identifier)
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(command
|
||||
(command_text)
|
||||
(command_argument)))))))
|
||||
(command_argument)))))))))
|
||||
|
||||
================================================================================
|
||||
Command with Semicolon
|
||||
@ -136,18 +148,21 @@ ls_output = ^ls --long -a; ls_output
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(assignment
|
||||
(identifier)
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(command
|
||||
(command_text)
|
||||
(command_argument)
|
||||
(command_argument))))))
|
||||
(command_argument))))))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier))))
|
||||
(identifier)))))
|
||||
|
||||
================================================================================
|
||||
Command with Semicolon
|
||||
@ -159,18 +174,21 @@ ls_output = ^ls --long -a; ls_output
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(assignment
|
||||
(identifier)
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(command
|
||||
(command_text)
|
||||
(command_argument)
|
||||
(command_argument))))))
|
||||
(command_argument))))))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier))))
|
||||
(identifier)))))
|
||||
|
||||
================================================================================
|
||||
Command with Quoted Semicolon
|
||||
@ -182,14 +200,17 @@ ls_output = ^echo ';'; ls_output
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(assignment
|
||||
(identifier)
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(command
|
||||
(command_text)
|
||||
(command_argument))))))
|
||||
(command_argument))))))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier))))
|
||||
(identifier)))))
|
||||
|
@ -9,8 +9,9 @@ not_a_comment
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier))))
|
||||
(identifier)))))
|
||||
|
||||
================================================================================
|
||||
Partial Line Comments
|
||||
@ -22,8 +23,9 @@ not_a_comment # comment
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier))))
|
||||
(identifier)))))
|
||||
|
||||
================================================================================
|
||||
Multiline Comments
|
||||
@ -37,9 +39,11 @@ not_a_comment #
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier)))
|
||||
(identifier))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string)))))
|
||||
(string))))))
|
||||
|
@ -11,11 +11,12 @@ enum Foobar {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(type_definition
|
||||
(enum_definition
|
||||
(identifier)
|
||||
(identifier)
|
||||
(identifier)))))
|
||||
(identifier))))))
|
||||
|
||||
================================================================================
|
||||
Nested Enum
|
||||
@ -33,6 +34,7 @@ enum Foobar {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(type_definition
|
||||
(enum_definition
|
||||
(identifier)
|
||||
@ -43,7 +45,7 @@ enum Foobar {
|
||||
(enum_definition
|
||||
(identifier)
|
||||
(identifier)
|
||||
(identifier)))))))
|
||||
(identifier))))))))
|
||||
|
||||
================================================================================
|
||||
Simple Enum Instance
|
||||
@ -55,11 +57,12 @@ Foobar::Foo
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(enum_instance
|
||||
(identifier)
|
||||
(identifier))))))
|
||||
(identifier)))))))
|
||||
|
||||
================================================================================
|
||||
Nested Enum Instance
|
||||
@ -71,6 +74,7 @@ FooBar::Bar(BazBuf::Baz(123))
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(enum_instance
|
||||
@ -83,4 +87,4 @@ FooBar::Bar(BazBuf::Baz(123))
|
||||
(identifier)
|
||||
(expression
|
||||
(value
|
||||
(integer)))))))))))
|
||||
(integer))))))))))))
|
||||
|
@ -14,10 +14,12 @@ fib = (i <int>) <int> {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(assignment
|
||||
(identifier)
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(function
|
||||
@ -28,6 +30,7 @@ fib = (i <int>) <int> {
|
||||
(type))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(if_else
|
||||
(if
|
||||
(expression
|
||||
@ -40,12 +43,14 @@ fib = (i <int>) <int> {
|
||||
(integer)))))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer))))))
|
||||
(integer)))))))
|
||||
(else
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(math
|
||||
(expression
|
||||
@ -72,4 +77,4 @@ fib = (i <int>) <int> {
|
||||
(math_operator)
|
||||
(expression
|
||||
(value
|
||||
(integer))))))))))))))))))))))
|
||||
(integer))))))))))))))))))))))))))
|
||||
|
@ -10,6 +10,7 @@ for i in [1, 2, 3] {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(for
|
||||
(identifier)
|
||||
(expression
|
||||
@ -26,12 +27,13 @@ for i in [1, 2, 3] {
|
||||
(integer))))))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(function_call
|
||||
(function_expression
|
||||
(identifier))
|
||||
(expression
|
||||
(identifier)))))))))
|
||||
(identifier)))))))))))
|
||||
|
||||
================================================================================
|
||||
Nested For Loop
|
||||
@ -47,21 +49,24 @@ for list in list_of_lists {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(for
|
||||
(identifier)
|
||||
(expression
|
||||
(identifier))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(for
|
||||
(identifier)
|
||||
(expression
|
||||
(identifier))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(function_call
|
||||
(function_expression
|
||||
(identifier))
|
||||
(expression
|
||||
(identifier))))))))))))
|
||||
(identifier)))))))))))))))
|
||||
|
@ -8,6 +8,7 @@ Anonymous Function
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(function
|
||||
@ -15,9 +16,10 @@ Anonymous Function
|
||||
(type))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string))))))))))
|
||||
(string))))))))))))
|
||||
|
||||
================================================================================
|
||||
Function Assignment
|
||||
@ -31,10 +33,12 @@ foobar = (x <int>, y <int>) <int> {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(assignment
|
||||
(identifier)
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(function
|
||||
@ -48,13 +52,14 @@ foobar = (x <int>, y <int>) <int> {
|
||||
(type))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(math
|
||||
(expression
|
||||
(identifier))
|
||||
(math_operator)
|
||||
(expression
|
||||
(identifier)))))))))))))
|
||||
(identifier))))))))))))))))
|
||||
|
||||
================================================================================
|
||||
Identifier Function Call
|
||||
@ -66,13 +71,14 @@ foobar("Hiya")
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(function_call
|
||||
(function_expression
|
||||
(identifier))
|
||||
(expression
|
||||
(value
|
||||
(string)))))))
|
||||
(string))))))))
|
||||
|
||||
================================================================================
|
||||
Index Function Call
|
||||
@ -84,6 +90,7 @@ foo:bar("Hiya")
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(function_call
|
||||
(function_expression
|
||||
@ -94,7 +101,7 @@ foo:bar("Hiya")
|
||||
(identifier))))
|
||||
(expression
|
||||
(value
|
||||
(string)))))))
|
||||
(string))))))))
|
||||
|
||||
================================================================================
|
||||
Double Function Call
|
||||
@ -106,6 +113,7 @@ foobar()("Hiya")
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(function_call
|
||||
(function_expression
|
||||
@ -114,7 +122,7 @@ foobar()("Hiya")
|
||||
(identifier))))
|
||||
(expression
|
||||
(value
|
||||
(string)))))))
|
||||
(string))))))))
|
||||
|
||||
================================================================================
|
||||
Anonymous Function Call
|
||||
@ -126,6 +134,7 @@ Anonymous Function Call
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(function_call
|
||||
(function_expression
|
||||
@ -138,11 +147,12 @@ Anonymous Function Call
|
||||
(type))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier)))))))
|
||||
(identifier))))))))
|
||||
(expression
|
||||
(value
|
||||
(string)))))))
|
||||
(string))))))))
|
||||
|
||||
================================================================================
|
||||
Complex Function Call
|
||||
@ -161,6 +171,7 @@ foobar(
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(function_call
|
||||
(function_expression
|
||||
@ -176,14 +187,16 @@ foobar(
|
||||
(map
|
||||
(identifier)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer))))
|
||||
(integer)))))
|
||||
(identifier)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer)))))))))))
|
||||
(integer)))))))))))))
|
||||
|
||||
================================================================================
|
||||
Callback Function Call
|
||||
@ -195,6 +208,7 @@ x(() <bool> { true })
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(function_call
|
||||
(function_expression
|
||||
@ -206,9 +220,10 @@ x(() <bool> { true })
|
||||
(type))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(boolean))))))))))))
|
||||
(boolean))))))))))))))
|
||||
|
||||
================================================================================
|
||||
Nested Function Call
|
||||
@ -220,6 +235,7 @@ from_json(read('file.json'))
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(function_call
|
||||
(function_expression
|
||||
@ -230,4 +246,4 @@ from_json(read('file.json'))
|
||||
(identifier))
|
||||
(expression
|
||||
(value
|
||||
(string)))))))))
|
||||
(string))))))))))
|
||||
|
@ -11,14 +11,18 @@ x123x
|
||||
|
||||
(root
|
||||
(statement
|
||||
(expression
|
||||
(identifier)))
|
||||
(statement
|
||||
(expression
|
||||
(identifier)))
|
||||
(statement
|
||||
(expression
|
||||
(identifier)))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier)))))
|
||||
|
@ -8,6 +8,7 @@ if true { "True" }
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(if_else
|
||||
(if
|
||||
(expression
|
||||
@ -15,9 +16,10 @@ if true { "True" }
|
||||
(boolean)))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string)))))))))
|
||||
(string)))))))))))
|
||||
|
||||
================================================================================
|
||||
Complex If
|
||||
@ -29,6 +31,7 @@ if 1 == 1 && 2 == 2 && 3 == 3 { "True" }
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(if_else
|
||||
(if
|
||||
(expression
|
||||
@ -66,9 +69,10 @@ if 1 == 1 && 2 == 2 && 3 == 3 { "True" }
|
||||
(integer)))))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string)))))))))
|
||||
(string)))))))))))
|
||||
|
||||
================================================================================
|
||||
Nested If
|
||||
@ -86,6 +90,7 @@ if true {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(if_else
|
||||
(if
|
||||
(expression
|
||||
@ -93,6 +98,7 @@ if true {
|
||||
(boolean)))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(if_else
|
||||
(if
|
||||
(expression
|
||||
@ -106,15 +112,17 @@ if true {
|
||||
(integer)))))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string))))))
|
||||
(string)))))))
|
||||
(else
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string)))))))))))))
|
||||
(string))))))))))))))))
|
||||
|
||||
================================================================================
|
||||
If Else
|
||||
@ -126,6 +134,7 @@ if false { "True" } else { "False" }
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(if_else
|
||||
(if
|
||||
(expression
|
||||
@ -133,15 +142,17 @@ if false { "True" } else { "False" }
|
||||
(boolean)))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string))))))
|
||||
(string)))))))
|
||||
(else
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string)))))))))
|
||||
(string)))))))))))
|
||||
|
||||
================================================================================
|
||||
If Else If
|
||||
@ -157,6 +168,7 @@ if 1 == 1 {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(if_else
|
||||
(if
|
||||
(expression
|
||||
@ -170,9 +182,10 @@ if 1 == 1 {
|
||||
(integer)))))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string))))))
|
||||
(string)))))))
|
||||
(else_if
|
||||
(expression
|
||||
(logic
|
||||
@ -185,9 +198,10 @@ if 1 == 1 {
|
||||
(integer)))))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string)))))))))
|
||||
(string)))))))))))
|
||||
|
||||
================================================================================
|
||||
If Else Else If Else
|
||||
@ -207,6 +221,7 @@ if false {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(if_else
|
||||
(if
|
||||
(expression
|
||||
@ -214,18 +229,20 @@ if false {
|
||||
(boolean)))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string))))))
|
||||
(string)))))))
|
||||
(else_if
|
||||
(expression
|
||||
(value
|
||||
(boolean)))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string))))))
|
||||
(string)))))))
|
||||
(else_if
|
||||
(expression
|
||||
(logic
|
||||
@ -244,12 +261,14 @@ if false {
|
||||
(integer)))))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string))))))
|
||||
(string)))))))
|
||||
(else
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string)))))))))
|
||||
(string)))))))))))
|
||||
|
@ -12,6 +12,7 @@ foobar:1:42
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(index
|
||||
(index_expression
|
||||
@ -22,15 +23,17 @@ foobar:1:42
|
||||
(value
|
||||
(integer)))))
|
||||
(index_expression
|
||||
(identifier)))))
|
||||
(identifier))))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(index
|
||||
(index_expression
|
||||
(identifier))
|
||||
(index_expression
|
||||
(identifier)))))
|
||||
(identifier))))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(index
|
||||
(index_expression
|
||||
@ -42,7 +45,7 @@ foobar:1:42
|
||||
(integer)))))
|
||||
(index_expression
|
||||
(value
|
||||
(integer)))))))
|
||||
(integer))))))))
|
||||
|
||||
================================================================================
|
||||
Nested Indexes
|
||||
@ -54,6 +57,7 @@ Nested Indexes
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(index
|
||||
(index_expression
|
||||
@ -85,7 +89,7 @@ Nested Indexes
|
||||
(value
|
||||
(integer)))))
|
||||
(index_expression
|
||||
(range))))))
|
||||
(range)))))))
|
||||
|
||||
================================================================================
|
||||
Function Call Index
|
||||
@ -97,6 +101,7 @@ x:(y()):0
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(index
|
||||
(index_expression
|
||||
@ -109,4 +114,4 @@ x:(y()):0
|
||||
(identifier))))))
|
||||
(index_expression
|
||||
(value
|
||||
(integer)))))))
|
||||
(integer))))))))
|
||||
|
@ -8,6 +8,7 @@ List Declaration
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(list
|
||||
@ -16,7 +17,7 @@ List Declaration
|
||||
(string)))
|
||||
(expression
|
||||
(value
|
||||
(integer))))))))
|
||||
(integer)))))))))
|
||||
|
||||
================================================================================
|
||||
List Nesting
|
||||
@ -28,6 +29,7 @@ List Nesting
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(list
|
||||
@ -45,4 +47,4 @@ List Nesting
|
||||
(list
|
||||
(expression
|
||||
(value
|
||||
(integer))))))))))))))
|
||||
(integer)))))))))))))))
|
||||
|
@ -8,6 +8,7 @@ true && false
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(logic
|
||||
(expression
|
||||
@ -16,7 +17,7 @@ true && false
|
||||
(logic_operator)
|
||||
(expression
|
||||
(value
|
||||
(boolean)))))))
|
||||
(boolean))))))))
|
||||
|
||||
================================================================================
|
||||
Logic Sequence
|
||||
@ -28,6 +29,7 @@ Logic Sequence
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(logic
|
||||
(expression
|
||||
@ -42,7 +44,7 @@ Logic Sequence
|
||||
(logic_operator)
|
||||
(expression
|
||||
(value
|
||||
(boolean)))))))
|
||||
(boolean))))))))
|
||||
|
||||
================================================================================
|
||||
Complex Logic Sequence
|
||||
@ -56,6 +58,7 @@ Complex Logic Sequence
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(logic
|
||||
(expression
|
||||
@ -97,4 +100,4 @@ Complex Logic Sequence
|
||||
(logic_operator)
|
||||
(expression
|
||||
(value
|
||||
(integer)))))))))
|
||||
(integer))))))))))
|
||||
|
@ -8,14 +8,16 @@ Simple Map
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(map
|
||||
(identifier)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer)))))))))
|
||||
(integer)))))))))))
|
||||
|
||||
================================================================================
|
||||
Map with Types
|
||||
@ -30,6 +32,7 @@ Map with Types
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(map
|
||||
@ -37,14 +40,16 @@ Map with Types
|
||||
(type_specification
|
||||
(type))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer))))
|
||||
(integer)))))
|
||||
(identifier)
|
||||
(type_specification
|
||||
(type
|
||||
(type)))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(list
|
||||
@ -53,7 +58,7 @@ Map with Types
|
||||
(string)))
|
||||
(expression
|
||||
(value
|
||||
(string))))))))))))
|
||||
(string))))))))))))))
|
||||
|
||||
================================================================================
|
||||
Nested Maps
|
||||
@ -73,35 +78,42 @@ x = {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(assignment
|
||||
(identifier)
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(map
|
||||
(identifier)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(map
|
||||
(identifier)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string))))
|
||||
(string)))))
|
||||
(identifier)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(map
|
||||
(identifier)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string))))))))))))
|
||||
(string)))))))))))))))
|
||||
(identifier)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer)))))))))))
|
||||
(integer))))))))))))))
|
||||
|
@ -13,6 +13,7 @@ match x {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(match
|
||||
(expression
|
||||
(identifier))
|
||||
@ -20,18 +21,21 @@ match x {
|
||||
(value
|
||||
(integer)))
|
||||
(statement
|
||||
(statement_kind
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(boolean))))))
|
||||
(boolean))))))))
|
||||
(match_pattern
|
||||
(value
|
||||
(integer)))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(boolean)))))))
|
||||
(boolean)))))))))
|
||||
|
||||
================================================================================
|
||||
Match Enum
|
||||
@ -46,6 +50,7 @@ match foobar {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(match
|
||||
(expression
|
||||
(identifier))
|
||||
@ -54,14 +59,16 @@ match foobar {
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(boolean))))
|
||||
(boolean)))))
|
||||
(match_pattern
|
||||
(enum_pattern
|
||||
(identifier)
|
||||
(identifier)))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(boolean)))))))
|
||||
(boolean)))))))))
|
||||
|
@ -8,11 +8,12 @@ Simple Command Pipe
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(pipe
|
||||
(command
|
||||
(command_text))
|
||||
(command
|
||||
(command_text)))))
|
||||
(command_text))))))
|
||||
|
||||
================================================================================
|
||||
Simple Function Pipe
|
||||
@ -24,6 +25,7 @@ fs:read('file.txt') | output()
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(pipe
|
||||
(function_call
|
||||
(function_expression
|
||||
@ -37,4 +39,4 @@ fs:read('file.txt') | output()
|
||||
(string))))
|
||||
(function_call
|
||||
(function_expression
|
||||
(identifier))))))
|
||||
(identifier)))))))
|
||||
|
@ -8,6 +8,7 @@ Simple Range
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(range)))))
|
||||
(range))))))
|
||||
|
@ -10,16 +10,19 @@ x
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer))))
|
||||
(integer)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string))))
|
||||
(string)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier))))
|
||||
(identifier)))))
|
||||
|
||||
================================================================================
|
||||
Simple Assignment
|
||||
@ -32,21 +35,25 @@ y = "one"
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(assignment
|
||||
(identifier)
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer))))))
|
||||
(integer))))))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(assignment
|
||||
(identifier)
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string)))))))
|
||||
(string)))))))))
|
||||
|
||||
================================================================================
|
||||
Complex Assignment
|
||||
@ -62,10 +69,12 @@ x = if 1 + 1 == 2 {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(assignment
|
||||
(identifier)
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(if_else
|
||||
(if
|
||||
(expression
|
||||
@ -85,15 +94,17 @@ x = if 1 + 1 == 2 {
|
||||
(integer)))))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string))))))
|
||||
(string)))))))
|
||||
(else
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string)))))))))))
|
||||
(string))))))))))))))
|
||||
|
||||
================================================================================
|
||||
Expression Precedence
|
||||
@ -105,10 +116,12 @@ x = 3 == 1 + 2 + 2
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(assignment
|
||||
(identifier)
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(math
|
||||
(expression
|
||||
@ -129,4 +142,4 @@ x = 3 == 1 + 2 + 2
|
||||
(math_operator)
|
||||
(expression
|
||||
(value
|
||||
(integer)))))))))
|
||||
(integer)))))))))))
|
||||
|
@ -11,6 +11,7 @@ struct Foo {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(type_definition
|
||||
(struct_definition
|
||||
(identifier)
|
||||
@ -19,7 +20,7 @@ struct Foo {
|
||||
(type))
|
||||
(identifier)
|
||||
(type_specification
|
||||
(type))))))
|
||||
(type)))))))
|
||||
|
||||
================================================================================
|
||||
Nested Structure
|
||||
@ -38,6 +39,7 @@ struct Foo {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(type_definition
|
||||
(struct_definition
|
||||
(identifier)
|
||||
@ -48,14 +50,16 @@ struct Foo {
|
||||
(type_specification
|
||||
(type))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(float))))
|
||||
(float)))))
|
||||
(identifier)
|
||||
(type_specification
|
||||
(type
|
||||
(identifier)))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(struct_instance
|
||||
@ -63,6 +67,7 @@ struct Foo {
|
||||
(map
|
||||
(identifier)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer)))))))))))))
|
||||
(integer))))))))))))))))
|
||||
|
@ -9,13 +9,15 @@ false
|
||||
|
||||
(root
|
||||
(statement
|
||||
(expression
|
||||
(value
|
||||
(boolean))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(boolean)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(boolean))))))
|
||||
|
||||
================================================================================
|
||||
Integers
|
||||
@ -28,25 +30,30 @@ Integers
|
||||
|
||||
(root
|
||||
(statement
|
||||
(expression
|
||||
(value
|
||||
(integer))))
|
||||
(statement
|
||||
(expression
|
||||
(value
|
||||
(integer))))
|
||||
(statement
|
||||
(expression
|
||||
(value
|
||||
(integer))))
|
||||
(statement
|
||||
(expression
|
||||
(value
|
||||
(integer))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer))))))
|
||||
|
||||
================================================================================
|
||||
Floats
|
||||
@ -68,43 +75,53 @@ infinity_gauntlet
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(float))))
|
||||
(float)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(float))))
|
||||
(float)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(float))))
|
||||
(float)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(float))))
|
||||
(float)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(float))))
|
||||
(float)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(float))))
|
||||
(float)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(float))))
|
||||
(float)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(float))))
|
||||
(statement
|
||||
(expression
|
||||
(identifier)))
|
||||
(float)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(identifier)))))
|
||||
|
||||
================================================================================
|
||||
Strings
|
||||
@ -116,22 +133,27 @@ Strings
|
||||
|
||||
(root
|
||||
(statement
|
||||
(expression
|
||||
(value
|
||||
(string))))
|
||||
(statement
|
||||
(expression
|
||||
(value
|
||||
(string))))
|
||||
(statement
|
||||
(expression
|
||||
(value
|
||||
(string))))
|
||||
(statement
|
||||
(expression
|
||||
(value
|
||||
(string))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string)))))
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(string))))))
|
||||
|
@ -10,19 +10,21 @@ while true {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(while
|
||||
(expression
|
||||
(value
|
||||
(boolean)))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(function_call
|
||||
(function_expression
|
||||
(identifier))
|
||||
(expression
|
||||
(value
|
||||
(string))))))))))
|
||||
(string))))))))))))
|
||||
|
||||
================================================================================
|
||||
Nested While Loop
|
||||
@ -38,12 +40,14 @@ while true {
|
||||
|
||||
(root
|
||||
(statement
|
||||
(statement_kind
|
||||
(while
|
||||
(expression
|
||||
(value
|
||||
(boolean)))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(while
|
||||
(expression
|
||||
(logic
|
||||
@ -55,10 +59,12 @@ while true {
|
||||
(integer)))))
|
||||
(block
|
||||
(statement
|
||||
(statement_kind
|
||||
(assignment
|
||||
(identifier)
|
||||
(assignment_operator)
|
||||
(statement
|
||||
(statement_kind
|
||||
(expression
|
||||
(value
|
||||
(integer)))))))))))))
|
||||
(integer)))))))))))))))))
|
||||
|
@ -15,6 +15,13 @@ module.exports = grammar({
|
||||
prec.left(
|
||||
seq(
|
||||
optional('return'),
|
||||
$.statement_kind,
|
||||
optional(';'),
|
||||
),
|
||||
),
|
||||
|
||||
statement_kind: $ =>
|
||||
prec.left(
|
||||
choice(
|
||||
$.assignment,
|
||||
$.block,
|
||||
@ -27,8 +34,6 @@ module.exports = grammar({
|
||||
$.while,
|
||||
$.type_definition,
|
||||
),
|
||||
optional(';'),
|
||||
),
|
||||
),
|
||||
|
||||
expression: $ =>
|
||||
|
@ -36,6 +36,28 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "statement_kind"
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ";"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"statement_kind": {
|
||||
"type": "PREC_LEFT",
|
||||
"value": 0,
|
||||
"content": {
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
@ -79,20 +101,6 @@
|
||||
"name": "type_definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "CHOICE",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ";"
|
||||
},
|
||||
{
|
||||
"type": "BLANK"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"expression": {
|
||||
|
@ -606,6 +606,21 @@
|
||||
"type": "statement",
|
||||
"named": true,
|
||||
"fields": {},
|
||||
"children": {
|
||||
"multiple": false,
|
||||
"required": true,
|
||||
"types": [
|
||||
{
|
||||
"type": "statement_kind",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "statement_kind",
|
||||
"named": true,
|
||||
"fields": {},
|
||||
"children": {
|
||||
"multiple": false,
|
||||
"required": true,
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user