Files
bproto/bprotoV1.g4
2025-04-14 14:43:03 +02:00

39 lines
1.0 KiB
ANTLR

grammar bprotoV1;
protocol_defintion : protocol_header (message_def | enum_def | bit_field_def)+;
protocol_header : 'protocol' IDENTIFIER 'version' INT ;
// Protocol definitions
message_def : 'message' message_id IDENTIFIER '{' (field ',')* (field ','?)? '}' ;
message_id : '[' INT ']';
enum_def : 'enum' IDENTIFIER enum_body;
bit_field_def : 'bits' IDENTIFIER bitfield_body;
field : field_pos IDENTIFIER ':' dtype;
field_pos : '[' INT ']';
dtype: type_standard | type_enum | type_bitfield;
type_standard : IDENTIFIER array_extension?;
type_enum : 'enum' (enum_body | IDENTIFIER);
type_bitfield : 'bits' (bitfield_body | IDENTIFIER);
array_extension: '[' INT ']';
// enum def
enum_body : '{' (enum_field ',')* (enum_field ','?)? '}';
enum_field: IDENTIFIER ('=' INT)? ;
// bit field def
bitfield_body : '{' (bitfield_field ',')* (bitfield_field ','?)? '}';
bitfield_field: IDENTIFIER (':' INT)?;
// Lexer rules
INT : [0-9]+;
IDENTIFIER : [a-zA-Z0-9_]+;
WS : [ \t\r\n]+ -> skip;
COMMENT : '//' ~[\r\n]* -> skip;
COMMENT_MULTILINE : '/*' .*? '*/' -> skip;