From 471276594ddcafeb1043850c0be9bbaad673b542 Mon Sep 17 00:00:00 2001 From: bnewbold Date: Sun, 18 Dec 2016 14:15:43 -0800 Subject: catch parser up with AST; remove generated parser rust The size of the generated parser file has exploded (to, eg, 8+ MB). Because we need to generate this anyways on every compile, remove it from version control (with gitignore). --- modelica-parser-lalrpop/src/parser.lalrpop | 107 +++++++++++++++++++++++++++-- 1 file changed, 100 insertions(+), 7 deletions(-) (limited to 'modelica-parser-lalrpop/src/parser.lalrpop') diff --git a/modelica-parser-lalrpop/src/parser.lalrpop b/modelica-parser-lalrpop/src/parser.lalrpop index 36aa07d..447c51f 100644 --- a/modelica-parser-lalrpop/src/parser.lalrpop +++ b/modelica-parser-lalrpop/src/parser.lalrpop @@ -1,6 +1,7 @@ use std::str::FromStr; -use ast::{ModelicaModel, ComponentDeclaration, ComponentClause, ComponentPrefix, Connection, - SimpleEquation, Expr, BinOperator, MathUnaryFunc}; +use ast::{ModelicaCode, ModelicaPackage, ModelicaBlock, ModelicaConnector, ModelicaType, ModelicaModel, ComponentDeclaration, + ComponentClause, ComponentPrefix, Connection, SimpleEquation, Expr, + BinOperator, MathUnaryFunc}; // This is an incomplete, non-standards-compliant, minimum-viable parser // Based on the Modelica 3.3r1 Spec @@ -34,9 +35,85 @@ pub boolean: bool = { // Grammar +pub file: Vec = { + => chunks, +}; + +pub modelica_code: ModelicaCode = { + model => ModelicaCode::Model(<>), + // TODO: class + // TODO: record + block => ModelicaCode::Block(<>), + connector => ModelicaCode::Connector(<>), + type_declaration => ModelicaCode::Type(<>), + package => ModelicaCode::Package(<>), + // TODO: function +}; + +pub package: ModelicaPackage = { + "package" + + "end" identifier ";" => + ModelicaPackage { + name:n, + description:desc, + children:children, + }, +}; + +pub connector: ModelicaConnector = { + "connector" + + "end" identifier ";" => + ModelicaConnector { + name:n, + description:desc, + component_clauses:cpc, }, +}; + +pub type_declaration: ModelicaType = { + "type" + "=" ";" => + ModelicaType { + name:n, + description:desc, + component:cpd, }, +}; + +pub block: ModelicaBlock = { + "block" + + )?> + )?> + "equation" + + + "end" identifier ";" => + ModelicaBlock { + name:n, + description:desc, + component_clauses:cpc, + public_component_clauses:public, + protected_component_clauses:protected, + connections:cc, + equations:se, + extends:vec![] }, +}; + pub model: ModelicaModel = { - "model" "equation" "end" identifier ";" => - ModelicaModel { name:n, description:desc, component_clauses:cpc, connections:cc, equations:se, extends:vec![] }, + "model" + + "equation" + + + "end" identifier ";" => + ModelicaModel { + name:n, + description:desc, + component_clauses:cpc, + connections:cc, + equations:se, + extends:vec![] }, }; value_declaration: Expr = { @@ -53,8 +130,25 @@ component_clause: ComponentClause = { }; component_declaration: ComponentDeclaration = { - (",")? => - ComponentDeclaration { name:name, description:desc, value:value, units:units, quantity:None }, + + + + + + (",")? => + ComponentDeclaration { + name:name, + dimensions:ad, + description:desc, + value:value, + units:units, + quantity:None }, +}; + +// TODO: this is very partial/cludgy +array_dimensions: Vec = { + "[" ","?)+> "]" => dimensions, + "[" ":" "]" => vec![], }; component_prefix: ComponentPrefix = { @@ -68,7 +162,6 @@ component_prefix: ComponentPrefix = { }; simple_equation: SimpleEquation = { - ":=" ";" => SimpleEquation {lhs:lhs, rhs:rhs}, "=" ";" => SimpleEquation {lhs:lhs, rhs:rhs}, }; -- cgit v1.2.3