# HG changeset patch # User Jan Vrany # Date 1336168857 -7200 # Node ID 46d4542c5f5ef37393e2866468ec9e70dd89a290 # Parent 4247b85d8584b77598ea80e6275b4b6ed0e5ada6 Checkin from browser diff -r 4247b85d8584 -r 46d4542c5f5e PPScriptingTest.st --- a/PPScriptingTest.st Sat May 05 00:00:45 2012 +0200 +++ b/PPScriptingTest.st Sat May 05 00:00:57 2012 +0200 @@ -7,80 +7,79 @@ category:'PetitTests-Tests' ! -PPScriptingTest comment:'These are some simple demo-scripts of parser combinators for the compiler construction course. -http://www.iam.unibe.ch/~scg/Teaching/CC/index.html' +PPScriptingTest comment:'These are some simple demo-scripts of parser combinators for the compiler construction course. http://www.iam.unibe.ch/~scg/Teaching/CC/index.html' ! !PPScriptingTest methodsFor:'examples'! expressionInterpreter - "Same as #expressionInterpreter but with semantic actions." - - | mul prim add dec | - add := PPUnresolvedParser new. - mul := PPUnresolvedParser new. - prim := PPUnresolvedParser new. - dec := ($0 ppMinus: $9) ==> [ :token | token codePoint - $0 codePoint ]. - add def: ((mul , $+ asParser , add) ==> [ :nodes | (nodes at: 1) + (nodes at: 3) ]) - / mul. - mul def: ((prim , $* asParser , mul) ==> [ :nodes | (nodes at: 1) * (nodes at: 3) ]) - / prim. - prim def: (($( asParser , add , $) asParser) ==> [ :nodes | nodes at: 2 ]) - / dec. - ^ add end + "Same as #expressionInterpreter but with semantic actions." + + | mul prim add dec | + add := PPUnresolvedParser new. + mul := PPUnresolvedParser new. + prim := PPUnresolvedParser new. + dec := ($0 ppMinus: $9) ==> [ :token | token codePoint - $0 codePoint ]. + add def: ((mul , $+ asParser , add) ==> [ :nodes | (nodes at: 1) + (nodes at: 3) ]) + / mul. + mul def: ((prim , $* asParser , mul) ==> [ :nodes | (nodes at: 1) * (nodes at: 3) ]) + / prim. + prim def: (($( asParser , add , $) asParser) ==> [ :nodes | nodes at: 2 ]) + / dec. + ^ add end "Modified: / 19-12-2010 / 18:13:51 / Jan Kurs " ! expressionParser - "Simple demo of scripting an expression parser." - - | mul prim add dec | - add := PPUnresolvedParser new. - mul := PPUnresolvedParser new. - prim := PPUnresolvedParser new. - dec := ($0 ppMinus: $9). - add def: (mul , $+ asParser , add) - / mul. - mul def: (prim , $* asParser , mul) - / prim. - prim def: ($( asParser , add , $) asParser) - / dec. - ^ add end + "Simple demo of scripting an expression parser." + + | mul prim add dec | + add := PPUnresolvedParser new. + mul := PPUnresolvedParser new. + prim := PPUnresolvedParser new. + dec := ($0 ppMinus: $9). + add def: (mul , $+ asParser , add) + / mul. + mul def: (prim , $* asParser , mul) + / prim. + prim def: ($( asParser , add , $) asParser) + / dec. + ^ add end "Modified: / 19-12-2010 / 18:14:18 / Jan Kurs " ! straightLineParser - | goal stm stmList id char dec exp expList mulExp primExp nonzero num lower upper | - goal := PPUnresolvedParser new. - stmList := PPUnresolvedParser new. - stm := PPUnresolvedParser new. - exp := PPUnresolvedParser new. - expList := PPUnresolvedParser new. - mulExp := PPUnresolvedParser new. - primExp := PPUnresolvedParser new. + | goal stm stmList id char dec exp expList mulExp primExp nonzero num lower upper | + goal := PPUnresolvedParser new. + stmList := PPUnresolvedParser new. + stm := PPUnresolvedParser new. + exp := PPUnresolvedParser new. + expList := PPUnresolvedParser new. + mulExp := PPUnresolvedParser new. + primExp := PPUnresolvedParser new. + + lower := $a ppMinus: $z. + upper := $A ppMinus: $Z. + char := lower / upper. + nonzero := $1 ppMinus: $9. + dec := $0 ppMinus: $9. + id := char, ( char / dec ) star. + num := $0 asParser / ( nonzero, dec star). - lower := $a ppMinus: $z. - upper := $A ppMinus: $Z. - char := lower / upper. - nonzero := $1 ppMinus: $9. - dec := $0 ppMinus: $9. - id := char, ( char / dec ) star. - num := $0 asParser / ( nonzero, dec star). - - goal def: stmList end. - stmList def: stm , ( $; asParser, stm ) star. - stm def: ( id, ':=' asParser, exp ) - / ( 'print' asParser, $( asParser, expList, $) asParser ). - exp def: mulExp, ( ( $+ asParser / $- asParser ), mulExp ) star. - expList def: exp, ( $, asParser, exp ) star. - mulExp def: primExp, ( ( $* asParser / $/ asParser ), primExp ) star. - primExp def: id - / num - / ( $( asParser, stmList, $, asParser, exp, $) asParser ). - ^ goal + goal def: stmList end. + stmList def: stm , ( $; asParser, stm ) star. + stm def: ( id, ':=' asParser, exp ) + / ( 'print' asParser, $( asParser, expList, $) asParser ). + exp def: mulExp, ( ( $+ asParser / $- asParser ), mulExp ) star. + expList def: exp, ( $, asParser, exp ) star. + mulExp def: primExp, ( ( $* asParser / $/ asParser ), primExp ) star. + primExp def: id + / num + / ( $( asParser, stmList, $, asParser, exp, $) asParser ). + ^ goal "Modified: / 19-12-2010 / 18:15:14 / Jan Kurs " ! ! @@ -88,7 +87,7 @@ !PPScriptingTest methodsFor:'tests'! testExpressionInterpreter - self + self assert: self expressionInterpreter parse: '2*(3+4)' to: 14 @@ -102,14 +101,14 @@ ! testSLassign - + self assert: self straightLineParser parse: 'abc:=1' to: #(#($a #($b $c) ':=' #(#(#($1 #()) #()) #())) #()) ! testSLprint - self + self assert: self straightLineParser parse: 'print(3,4)' to: #(('print' $( ((($3 ()) ()) () (($, ((($4 ()) ()) ())))) $)) ()) @@ -117,6 +116,14 @@ !PPScriptingTest class methodsFor:'documentation'! +version + ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPScriptingTest.st,v 1.3 2012-05-04 22:00:57 vrany Exp $' +! + +version_CVS + ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPScriptingTest.st,v 1.3 2012-05-04 22:00:57 vrany Exp $' +! + version_SVN - ^ '$Id: PPScriptingTest.st,v 1.2 2012-01-13 11:22:50 cg Exp $' + ^ '§Id: PPScriptingTest.st 5 2010-12-19 17:38:27Z kursjan §' ! !