Dataflow Interchange Format Grammar

Language Version: 1.0

Document Version: June-05-2007

Copyright (c) 1999-2008
Maryland DSPCAD Research Group,
The University of Maryland at College Park

Package mapss . dif . language . sablecc ;

Helpers

all = [ 0 .. 127 ]
digit = [ '0' .. '9' ]
non_digit = [ [ [ 'a' .. 'z' ] + [ 'A' .. 'Z' ] ] + '_' ]
double = ( '+' | '-' ) ? ( digit * ) '.' ( digit + ) ( ( 'e' | 'E' ) ( '+' | '-' ) ? digit + ) ?
integer = ( '+' | '-' ) ? digit +
tab = 9
cr = 13
lf = 10
eol = cr lf | cr | lf
not_cr_lf = [ all - [ cr + lf ] ]
not_star = [ all - '*' ]
not_star_slash = [ not_star - '/' ]
short_comment = '//' not_cr_lf * eol
long_comment = '/*' not_star * '*' + ( not_star_slash not_star * '*' + ) * '/'
comment = long_comment | short_comment
simple_escape_sequence = '\"' | '\\' | '\b' | '\f' | '\n' | '\r' | '\t'
octal_digit = [ '0' .. '7' ]
octal_escape_sequence = '\' octal_digit octal_digit ? octal_digit ?
hexadecimal_digit = [ digit + [ [ 'a' .. 'f' ] + [ 'A' .. 'F' ] ] ]
hexadecimal_escape_sequence = '\x' hexadecimal_digit +
escape_sequence = simple_escape_sequence | octal_escape_sequence | hexadecimal_escape_sequence
s_char = [ all - [ '"' + [ '$' + [ '\' + [ 10 + 13 ] ] ] ] ] | escape_sequence
s_char_sequence = s_char *

Tokens

blank = ( ' ' | tab | eol )
comment = comment
l_bkt = '{'
r_bkt = '}'
l_par = '('
r_par = ')'
l_sqr = '['
r_sqr = ']'
semicolon = ';'
colon = ':'
comma = ','
s_qte = '''
plus = '+'
equal = '='
dot = '.'
graph = 'graph'
attribute = 'attribute'
basedon = 'basedon'
interface = 'interface'
parameter = 'parameter'
refinement = 'refinement'
topology = 'topology'
actor = 'actor'
inputs = 'inputs'
outputs = 'outputs'
nodes = 'nodes'
edges = 'edges'
integer = integer
double = double
true = 'true'
false = 'false'
string = '"' s_char_sequence '"'
string_tail = '+' ( ' ' | eol | tab ) * '"' s_char_sequence '"'
identifier = non_digit ( digit | non_digit ) *
string_identifier = '$' s_char_sequence '$'

Ignored Tokens

Productions

graph_list =
graph_block *
graph_block =
identifier name l_bkt block * r_bkt
block =
{basedon} basedon basedon_body
| {topology} topology topology_body
| {interface} interface interface_body
| {parameter} parameter parameter_body
| {refinement} refinement refinement_body
| {builtin_attribute} identifier attribute_body
| {user_defined_attribute} attribute name attribute_body
| {actor} actor name actor_body
name =
{identifier} identifier
| {string_identifier} string_identifier
basedon_body =
l_bkt basedon_expression r_bkt
basedon_expression =
name semicolon
topology_body =
l_bkt topology_list * r_bkt
topology_list =
{nodes} nodes equal name node_identifier_tail * semicolon
| {edges} edges equal edge_definition edge_definition_tail * semicolon
node_identifier_tail =
comma name
edge_definition =
[edge]:name l_par [source]:name comma [sink]:name r_par
edge_definition_tail =
comma edge_definition
interface_body =
l_bkt interface_expression * r_bkt
interface_expression =
{input} inputs equal port_definition port_definition_tail * semicolon
| {output} outputs equal port_definition port_definition_tail * semicolon
port_definition =
{plain} name
| {node} [port]:name colon [node]:name
port_definition_tail =
comma port_definition
parameter_body =
l_bkt parameter_expression * r_bkt
parameter_expression =
{value} name param_type ? equal value semicolon
| {range} name param_type ? colon range_block semicolon
| {blank} name param_type ? semicolon
range_block =
range range_tail *
range =
{closed_closed} l_sqr [left]:number comma [right]:number r_sqr
| {open_closed} l_par [left]:number comma [right]:number r_sqr
| {closed_open} l_sqr [left]:number comma [right]:number r_par
| {open_open} l_par [left]:number comma [right]:number r_par
| {discrete} l_bkt number discrete_range_number_tail * r_bkt
discrete_range_number_tail =
comma number
range_tail =
plus range
number =
{double} double
| {integer} integer
param_type =
colon string
refinement_body =
l_bkt refinement_definition refinement_expression * r_bkt
refinement_definition =
[graph]:name equal [node]:name semicolon
refinement_expression =
{ports} [port]:name colon [element]:name semicolon
| {params} [subparam]:name equal [param]:name semicolon
attribute_body =
l_bkt attribute_expression * r_bkt
attribute_expression =
{value} name ? equal value semicolon
| {reference} [element]:name ? equal [reference]:name semicolon
| {subelement_assign} [trggraph]:name [fst]:dot [trgele]:name equal [srcgraph]:name [snd]:dot [srcele]:name semicolon
| {idlist} name ? equal id_list semicolon
id_list =
name ref_id_tail +
ref_id_tail =
comma name
actor_body =
l_bkt actor_expression * r_bkt
actor_expression =
{value} name type ? equal value semicolon
| {reference} [argument]:name type ? equal [reference]:name semicolon
| {reflist} name type ? equal id_list semicolon
type =
{attr} colon identifier
| {data} [attr]:colon [value]:colon string
| {attr_data} [attr]:colon identifier [value]:colon string
complex =
l_par [real]:number comma [imag]:number r_par
value =
{integer} integer
| {double} double
| {complex} complex
| {numeric_matrix} l_sqr numeric_row numeric_row_tail * r_sqr
| {complex_matrix} l_sqr complex_row complex_row_tail * r_sqr
| {string} concatenated_string_value
| {boolean} boolean_value
| {array} l_bkt value value_tail * r_bkt
numeric_row =
number numeric_tail *
numeric_tail =
comma number
numeric_row_tail =
semicolon numeric_row
complex_row =
complex complex_tail *
complex_tail =
comma complex
complex_row_tail =
semicolon complex_row
concatenated_string_value =
string string_tail *
boolean_value =
{true} true
| {false} false
value_tail =
comma value