diff --git a/.gitignore b/.gitignore index f2a6055a..2fc7951c 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,5 @@ jspm_packages .node_repl_history build/ + +.DS_Store \ No newline at end of file diff --git a/src/js/jssm-dot.peg b/src/js/jssm-dot.peg new file mode 100644 index 00000000..90e62aed --- /dev/null +++ b/src/js/jssm-dot.peg @@ -0,0 +1,42 @@ +/* + * Simple Arithmetics Grammar + * ========================== + * + * Accepts expressions like "2 * (3 + 4)" and computes their value. + */ + +Expression + = Whitespace ExpList Whitespace + +Integer "integer" + = [0-9]+ { return parseInt(text(), 10); } + +ForwardArrow "forward arrow" + = "->" + +TwoWayArrow "two way arrow" + = "<->" + +Arrow + = ForwardArrow / TwoWayArrow + +Label "label" + = [0-9a-zA-Z]+ + +Subexp + = Whitespace arrow:Arrow Whitespace label:Label Whitespace tail:Subexp* { return {kind: arrow, to: label, se:(tail === [])? undefined : tail}; } + +Exp + = label:Label se:Subexp Whitespace ';' Whitespace { + const unroll = function(dive) { return true; } + return {from: label, se:(se === [])? undefined : se}; + } + +SubexpItem + = Subexp + +ExpList + = exp:Exp* + +Whitespace "whitespace" + = [ \t\n\r\v]* \ No newline at end of file