Skip to content

Commit f7099ad

Browse files
committed
wip
1 parent e1eb7de commit f7099ad

File tree

124 files changed

+9
-667508
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

124 files changed

+9
-667508
lines changed

src/ast/attribute_default_rel.rs

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/ast/attribute_definition_rel.rs

Lines changed: 0 additions & 11 deletions
This file was deleted.

src/ast/attribute_definition_rel_object_type.rs

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/ast/attribute_rel.rs

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/ast/attribute_rel_object_type.rs

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/ast/dbc.rs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
use crate::ast::attribute_default_rel::AttributeDefaultRel;
2-
use crate::ast::attribute_definition_rel::AttributeDefinitionRel;
3-
use crate::ast::attribute_rel::AttributeRel;
41
use crate::ast::{
52
AttributeDefault, AttributeDefinition, AttributeValueForObject, Baudrate, Comment,
63
EnvironmentVariable, EnvironmentVariableData, ExtendedMultiplex, Message, MessageId,
@@ -50,13 +47,6 @@ pub struct Dbc {
5047
/// Encoding for signal raw values
5148
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty"))]
5249
pub value_descriptions: Vec<ValueDescription>,
53-
/// Relative attribute definitions
54-
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty"))]
55-
pub attribute_definition_rels: Vec<AttributeDefinitionRel>,
56-
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty"))]
57-
pub attribute_default_rels: Vec<AttributeDefaultRel>,
58-
#[cfg_attr(feature = "serde", serde(skip_serializing_if = "Vec::is_empty"))]
59-
pub attribute_rels: Vec<AttributeRel>,
6050
// obsolete + undefined
6151
// category_definitions: Vec<CategoryDefinition>,
6252
// obsolete + undefined

src/ast/mod.rs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,7 @@ mod access_node;
33
mod access_type;
44
mod attr_default;
55
mod attribute_default;
6-
mod attribute_default_rel;
76
mod attribute_definition;
8-
mod attribute_definition_rel;
9-
mod attribute_definition_rel_object_type;
10-
mod attribute_rel;
11-
mod attribute_rel_object_type;
127
mod attribute_value;
138
mod attribute_value_for_object;
149
mod attribute_value_type;
@@ -47,12 +42,7 @@ pub use access_node::*;
4742
pub use access_type::*;
4843
pub use attr_default::*;
4944
pub use attribute_default::*;
50-
pub use attribute_default_rel::*;
5145
pub use attribute_definition::*;
52-
pub use attribute_definition_rel::*;
53-
pub use attribute_definition_rel_object_type::*;
54-
pub use attribute_rel::*;
55-
pub use attribute_rel_object_type::*;
5646
pub use attribute_value::*;
5747
pub use attribute_value_for_object::*;
5848
pub use attribute_value_type::*;

src/parser.rs

Lines changed: 9 additions & 235 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,13 @@ use std::str;
77
use can_dbc_pest::{DbcParser, Pair, Pairs, Parser as _, Rule};
88

99
use crate::{
10-
AccessNode, AccessType, AttributeDefault, AttributeDefaultRel, AttributeDefinition,
11-
AttributeDefinitionRel, AttributeDefinitionRelObjectType, AttributeRel, AttributeRelObjectType,
12-
AttributeValue, AttributeValueForObject, AttributeValueType, AttributeValuedForObjectType,
13-
Baudrate, ByteOrder, Comment, Dbc, DbcError, DbcResult, EnvType, EnvironmentVariable,
14-
EnvironmentVariableData, ExtendedMultiplex, ExtendedMultiplexMapping, Message, MessageId,
15-
MessageTransmitter, MultiplexIndicator, Node, Signal, SignalExtendedValueType,
16-
SignalExtendedValueTypeList, SignalGroups, SignalType, SignalTypeRef, Symbol, Transmitter,
17-
ValDescription, ValueDescription, ValueTable, ValueType, Version,
10+
AccessNode, AccessType, AttributeDefault, AttributeDefinition, AttributeValue,
11+
AttributeValueForObject, AttributeValuedForObjectType, Baudrate, ByteOrder, Comment, Dbc,
12+
DbcError, DbcResult, EnvType, EnvironmentVariable, EnvironmentVariableData, ExtendedMultiplex,
13+
ExtendedMultiplexMapping, Message, MessageId, MessageTransmitter, MultiplexIndicator, Node,
14+
Signal, SignalExtendedValueType, SignalExtendedValueTypeList, SignalGroups, SignalType,
15+
SignalTypeRef, Symbol, Transmitter, ValDescription, ValueDescription, ValueTable, ValueType,
16+
Version,
1817
};
1918

2019
/// Helper function to extract string content from quoted_str rule
@@ -442,218 +441,6 @@ pub(crate) fn parse_attribute_value(pair: Pair<Rule>) -> DbcResult<AttributeValu
442441
}
443442
}
444443

445-
/// Parse relative attribute definition: BA_DEF_REL_ object_type attribute_name attribute_type;
446-
pub(crate) fn parse_attribute_definition_rel(
447-
pair: Pair<Rule>,
448-
) -> DbcResult<AttributeDefinitionRel> {
449-
let mut object_type = None;
450-
let mut attribute_name = String::new();
451-
let mut attribute_type = None;
452-
453-
for pair2 in pair.into_inner() {
454-
match pair2.as_rule() {
455-
Rule::attribute_name => {
456-
attribute_name = parse_str(pair2);
457-
}
458-
Rule::attribute_type_int => {
459-
let (min_val, max_val) = parse_min_max_int(pair2)?;
460-
attribute_type = Some(AttributeValueType::Int(min_val, max_val));
461-
}
462-
Rule::attribute_type_hex => {
463-
let (min_val, max_val) = parse_min_max_int(pair2)?;
464-
attribute_type = Some(AttributeValueType::Hex(min_val, max_val));
465-
}
466-
Rule::attribute_type_float => {
467-
let (min_val, max_val) = parse_min_max_float(pair2)?;
468-
attribute_type = Some(AttributeValueType::Float(min_val, max_val));
469-
}
470-
Rule::attribute_type_string => {
471-
attribute_type = Some(AttributeValueType::String);
472-
}
473-
Rule::attribute_type_enum => {
474-
let mut enum_values = Vec::new();
475-
for enum_pair in pair2.into_inner() {
476-
if enum_pair.as_rule() == Rule::quoted_str {
477-
enum_values.push(parse_str(enum_pair));
478-
}
479-
}
480-
attribute_type = Some(AttributeValueType::Enum(enum_values));
481-
}
482-
Rule::rel_object_type => {
483-
let text = pair2.as_str();
484-
match text {
485-
"BU_SG_REL_" => object_type = Some(AttributeDefinitionRelObjectType::BuSgRel),
486-
"BU_BO_REL_" => object_type = Some(AttributeDefinitionRelObjectType::BuBoRel),
487-
"BU_EV_REL_" => object_type = Some(AttributeDefinitionRelObjectType::BuEvRel),
488-
_ => return Err(DbcError::ParseError),
489-
}
490-
}
491-
_other => {
492-
// Ignore other rules
493-
}
494-
}
495-
}
496-
497-
let object_type = object_type.ok_or(DbcError::ParseError)?;
498-
let attribute_value_type = attribute_type.ok_or(DbcError::ParseError)?;
499-
500-
Ok(AttributeDefinitionRel {
501-
object_type,
502-
attribute_name,
503-
attribute_value_type,
504-
})
505-
}
506-
507-
/// Parse relative attribute value: BA_REL_ attribute_name object_type object_name value;
508-
pub(crate) fn parse_attribute_rel(pair: Pair<Rule>) -> DbcResult<AttributeRel> {
509-
let mut _attribute_name = String::new();
510-
let mut _object_type = None;
511-
let mut _node_name = String::new();
512-
let mut _message_id = None;
513-
let mut _signal_name = None;
514-
let mut _value = None;
515-
516-
let mut inner_pairs = pair.into_inner();
517-
518-
// Parse the structure: attribute_name, rel_object_type, rel_object_data
519-
// First should be attribute_name
520-
_attribute_name = parse_str(next_rule(&mut inner_pairs, Rule::attribute_name)?);
521-
522-
// Second should be rel_object_type
523-
let rel_object_type_pair = next_rule(&mut inner_pairs, Rule::rel_object_type)?;
524-
let text = rel_object_type_pair.as_str();
525-
match text {
526-
"BU_SG_REL_" => _object_type = Some(AttributeRelObjectType::BuSgRel),
527-
"BU_BO_REL_" => _object_type = Some(AttributeRelObjectType::BuBoRel),
528-
"BU_EV_REL_" => _object_type = Some(AttributeRelObjectType::BuEvRel),
529-
_ => return Err(DbcError::ParseError),
530-
}
531-
532-
// Third should be rel_object_data - parse based on object type
533-
let rel_object_data_pair = next_rule(&mut inner_pairs, Rule::rel_object_data)?;
534-
let mut data_pairs = rel_object_data_pair.into_inner();
535-
536-
match _object_type.as_ref().unwrap() {
537-
AttributeRelObjectType::BuSgRel => {
538-
// Pattern: ident ~ "SG_" ~ int ~ ident ~ num_str_value
539-
// node_name, "SG_", message_id, signal_name, value
540-
_node_name = next_rule(&mut data_pairs, Rule::ident)?
541-
.as_str()
542-
.to_string();
543-
544-
let sg_pair = next_rule(&mut data_pairs, Rule::signal_var)?;
545-
// signal_var contains: signal_literal ~ message_id ~ ident
546-
// signal_literal is silent (_), so we get message_id and ident directly
547-
let mut signal_var_pairs = sg_pair.into_inner();
548-
549-
// Get message_id (signal_literal is silent)
550-
let msg_id = parse_uint(next_rule(&mut signal_var_pairs, Rule::message_id)?)? as u32;
551-
_message_id = Some(if msg_id & (1 << 31) != 0 {
552-
MessageId::Extended(msg_id & 0x1FFF_FFFF)
553-
} else {
554-
MessageId::Standard(msg_id as u16)
555-
});
556-
557-
// Get signal name
558-
_signal_name = Some(
559-
next_rule(&mut signal_var_pairs, Rule::ident)?
560-
.as_str()
561-
.to_string(),
562-
);
563-
}
564-
AttributeRelObjectType::BuBoRel => {
565-
// Pattern: ident ~ message_id ~ num_str_value
566-
// node_name, message_id, value
567-
_node_name = next_rule(&mut data_pairs, Rule::ident)?
568-
.as_str()
569-
.to_string();
570-
571-
let msg_id = parse_uint(next_rule(&mut data_pairs, Rule::message_id)?)? as u32;
572-
_message_id = Some(if msg_id & (1 << 31) != 0 {
573-
MessageId::Extended(msg_id & 0x1FFF_FFFF)
574-
} else {
575-
MessageId::Standard(msg_id as u16)
576-
});
577-
}
578-
AttributeRelObjectType::BuEvRel => {
579-
// Pattern: ident ~ "EV_" ~ ident ~ num_str_value
580-
// node_name, "EV_", env_var_name, value
581-
_node_name = next_rule(&mut data_pairs, Rule::ident)?
582-
.as_str()
583-
.to_string();
584-
585-
// Skip env_literal (EV_) - it's silent
586-
let env_var_name = next_rule(&mut data_pairs, Rule::ident)?
587-
.as_str()
588-
.to_string();
589-
_signal_name = Some(env_var_name);
590-
}
591-
}
592-
593-
// The last item should be the value (num_str_value is silent, so we get quoted_str or number)
594-
let value_pair = data_pairs.next().ok_or(DbcError::ParseError)?;
595-
_value = Some(match value_pair.as_rule() {
596-
Rule::quoted_str => AttributeValue::String(parse_str(value_pair)),
597-
Rule::number => {
598-
let value_str = value_pair.as_str();
599-
if let Ok(int_val) = value_str.parse::<i64>() {
600-
AttributeValue::I64(int_val)
601-
} else if let Ok(float_val) = value_str.parse::<f64>() {
602-
AttributeValue::Double(float_val)
603-
} else {
604-
return Err(DbcError::ParseError);
605-
}
606-
}
607-
_ => return Err(DbcError::ParseError),
608-
});
609-
610-
// Don't use expect_empty here as there might be comments or whitespace
611-
612-
let object_type = _object_type.ok_or(DbcError::ParseError)?;
613-
let message_id = _message_id.ok_or(DbcError::ParseError)?;
614-
let value = _value.ok_or(DbcError::ParseError)?;
615-
616-
Ok(AttributeRel {
617-
attribute_name: _attribute_name,
618-
object_type,
619-
node_name: _node_name,
620-
message_id,
621-
signal_name: _signal_name,
622-
value,
623-
})
624-
}
625-
626-
/// Parse relative attribute default: BA_DEF_DEF_REL_ attribute_name default_value;
627-
pub(crate) fn parse_attribute_default_rel(pair: Pair<Rule>) -> DbcResult<AttributeDefaultRel> {
628-
let mut inner_pairs = pair.into_inner();
629-
630-
let attribute_name = parse_str(next_rule(&mut inner_pairs, Rule::attribute_name)?);
631-
632-
// Parse the value - could be quoted_str or number (num_str_value is silent)
633-
let value_pair = inner_pairs.next().ok_or(DbcError::ParseError)?;
634-
let value = match value_pair.as_rule() {
635-
Rule::quoted_str => AttributeValue::String(parse_str(value_pair)),
636-
Rule::number => {
637-
let value_str = value_pair.as_str();
638-
if let Ok(int_val) = value_str.parse::<i64>() {
639-
AttributeValue::I64(int_val)
640-
} else if let Ok(float_val) = value_str.parse::<f64>() {
641-
AttributeValue::Double(float_val)
642-
} else {
643-
return Err(DbcError::ParseError);
644-
}
645-
}
646-
_ => return Err(DbcError::ParseError),
647-
};
648-
649-
// Don't use expect_empty here as there might be comments or whitespace
650-
651-
Ok(AttributeDefaultRel {
652-
attribute_name,
653-
attribute_value: value,
654-
})
655-
}
656-
657444
/// Parse value table: VAL_TABLE_ table_name value1 "description1" value2 "description2" ... ;
658445
pub(crate) fn parse_value_table(pair: Pair<Rule>) -> DbcResult<ValueTable> {
659446
let mut inner_pairs = pair.into_inner();
@@ -686,6 +473,7 @@ fn next_rule<'a>(iter: &'a mut Pairs<Rule>, expected_rule: Rule) -> DbcResult<Pa
686473
}
687474
}
688475

476+
#[allow(dead_code)]
689477
fn peek_rule<'a>(iter: &mut Pairs<'a, Rule>, expected_rule: Rule) -> Option<Pair<'a, Rule>> {
690478
if let Some(pair) = iter.peek() {
691479
if pair.as_rule() == expected_rule {
@@ -696,6 +484,7 @@ fn peek_rule<'a>(iter: &mut Pairs<'a, Rule>, expected_rule: Rule) -> Option<Pair
696484
}
697485

698486
/// Helper function to ensure the iterator is empty (no more items)
487+
#[allow(dead_code)]
699488
fn expect_empty<'a>(iter: &mut Pairs<Rule>) -> DbcResult<()> {
700489
if iter.next().is_some() {
701490
Err(DbcError::ParseError)
@@ -1151,9 +940,6 @@ pub(crate) fn dbc(buffer: &str) -> DbcResult<Dbc> {
1151940
let mut attribute_definitions: Vec<AttributeDefinition> = Default::default();
1152941
let mut attribute_defaults: Vec<AttributeDefault> = Default::default();
1153942
let mut attribute_values: Vec<AttributeValueForObject> = Default::default();
1154-
let mut attribute_definition_rels: Vec<AttributeDefinitionRel> = Default::default();
1155-
let mut attribute_default_rels: Vec<AttributeDefaultRel> = Default::default();
1156-
let mut attribute_rels: Vec<AttributeRel> = Default::default();
1157943
let mut value_descriptions: Vec<ValueDescription> = Default::default();
1158944
let signal_type_refs: Vec<SignalTypeRef> = Default::default();
1159945
let mut signal_groups: Vec<SignalGroups> = Default::default();
@@ -1197,15 +983,6 @@ pub(crate) fn dbc(buffer: &str) -> DbcResult<Dbc> {
1197983
}
1198984
Rule::bo_tx_bu => message_transmitters.push(parse_message_transmitter(pair2)?),
1199985
Rule::ba_def_def => attribute_defaults.push(parse_attribute_default(pair2)?),
1200-
Rule::ba_def_rel => {
1201-
attribute_definition_rels.push(parse_attribute_definition_rel(pair2)?);
1202-
}
1203-
Rule::ba_rel => {
1204-
attribute_rels.push(parse_attribute_rel(pair2)?);
1205-
}
1206-
Rule::ba_def_def_rel => {
1207-
attribute_default_rels.push(parse_attribute_default_rel(pair2)?);
1208-
}
1209986
Rule::sg_mul_val => extended_multiplex.push(parse_extended_multiplex(pair2)?),
1210987
Rule::environment_variable => {
1211988
environment_variables.push(parse_environment_variable(pair2)?)
@@ -1241,9 +1018,6 @@ pub(crate) fn dbc(buffer: &str) -> DbcResult<Dbc> {
12411018
attribute_definitions,
12421019
attribute_defaults,
12431020
attribute_values,
1244-
attribute_definition_rels,
1245-
attribute_default_rels,
1246-
attribute_rels,
12471021
value_descriptions,
12481022
signal_type_refs,
12491023
signal_groups,

0 commit comments

Comments
 (0)