SlideShare a Scribd company logo
1 of 23
AustenX 
AustenX: a parser generator 
with some novel features 
Presented by Matthew Goode 
scratchy.org.nz
Overview 
● AustenX is a parser generator built using Java 
● But target languages will extend beyond Java 
● It is based on Parsing Expression Grammars (PEGs), 
and uses Packrat memorisation 
● Provides extensions to PEGs, and also handles 
left-recursion well (not so easy with PEG 
parsers) – with an interesting solution to a an 
interesting theorectical problem that has 
practical uses. 
● AustenX is built using a code-generator code 
generator tool, called SkeletonX, which is 
interesting in its own right.
Parser Generators 
● Given a grammar, generate code to facilitate 
reading text files 
● Parsing Expression Grammar a form of 
grammar, that unlike context-free, is 
unambigiuous (not based on generation). 
● Eg: 
● 'Hello' 'A'+ 
● 'A'* 'B'? 'A' / 'B' 
● E = { E '+' E } / NUMBER
Examples 
● Hello = 'Hello' 
● ManyAs = 'A'+ 
● AsAndMaybeB = 'A'* 'B'? 
● AorB = 'A' / 'B' BOrBA = 'B' / 'BA' 
● E = { NUMBER { '+' NUMBER } * } 
/ NUMBER 
● AFollowedByB = 'A' & 'B' 
● AnotFollowedByB = 'A' ! 'B'
Recursive Descent 
● PEGs are easy to translate to code 
● Eg FunctionCall = ID '(' Arguments ')' 'A'* 
function readFunctionCall() { 
if(!readID()) reset() return fail 
if(!consume('(') reset() return fail 
if(!readArguments() ) reset() return fail 
if(!consume(')') reset() return fail 
while(consume('A')) {} 
}
Redundant Calls 
● Like doing a Fibonacci calculation 
● Dynamic programming solution 
● Create a table of Rules x Positions 
● Starting at end, calculate Rule at each position 
● Previous rules only require later rules 
● Packrat parsing 
● Start at beginning, only do resolution when 
requested, store result
Example 
4 + 3 * 2 A A A 
Add 
Mult 
As 
Exp 
Hello 
Stuff
Left Recursion 
● Recursive Descent and Packrat parsing has 
problems with left recursion 
● EG 
● E = {E '+' E } / Number 
● Creates infinite loops 
function readE() { 
readE() 
... 
}
Solution 
● 'Bubble up' resolutions 
● Eg 1 + 2 
● First pass, no resolution, so E '+' E fails, but 
Num consumes the 1 
● Current best => E = Num ( '1' ) 
● Retry until no more gains 
● E = ('1') + ('2')
Problem 
● Always right associative 
● Eg E = { E '+' E } / { E '*' E } / Num 
● Always resolves 1 * 2 + 3 to ( (1) * ( (2) + (3) ) 
● Eg E = { E '*' E } / { E '+' E } / Num 
● Also resolves 1 * 2 + 3 to ( (1) * ( (2) + (3) )! 
● Problem only occurs when there is a right 
recursion of rule with left recursion
Solution 
● A process of reinterpreting/rewriting 
● Recall 1 * 2 + 3, with E = { E '+' E } / { E '*' E } / 
Num 
● Resolution at '2' is ((2) + (3)) 
● If resolved '(1) ', note that '+' is higher priority 
than '*', so search recursion to find lower – 
eg (2) 
● Now resolved to ((1) * (2)) 
● Bubble up to get (((1) * (2)) + 3)
Back to AustenX 
● Currently uses seperate tokenisation 
● A DFA (Lex-like) tokeniser included 
● Allows the left-recursion discussed, with 
indirect and direct recursion 
● Allows selective memorisation 
● Provides statistics on use 
● Turns out memorisation (at least with 
tokenisation) is mostly not needed 
● Has extensions to PEG
Example grammar 
pattern Example2 { 
Add ( Example2:left PLUS Example2:right ) 
Number ( NUMBER:value ) 
ID ( ID:value ) 
} 
pattern Example1( 
ID:name STRING Example2:first 
ID Example2 
)
Extended PEGs 
● Easy split 
● (AustenX uses '|' for 'or') 
● Arguments = Arugment / Comma 
● Variables and queries 
● Pattern Fib [$x=0 $y=0 $next=0 $t = 0 $l = 2]( 
$x=INT $y=INT 
{ $t = $x +$y $next = INT ($t==$next) 
$x = $y $y = $next $l++ } * $l:length )
Built in GUI
Future directions 
● Better error handling 
● Improved tokenisation 
● With scanner-free, and binary modes 
● New language targets 
● Support for indentation-sensitive languages 
● Formal (or at least informal) write-up of 
ordered left recursion
SkeletonX 
● AustenX is a code generator 
● SkeletonX is a tool for making code 
generators. It is a code generator code 
generator. 
● Not just a template engine! 
● It understands (a subset of) Java 
● Currently going through many iterations to get 
a version that uses itself (not quite there yet) 
● Many headaches over how scope should work
SkeletonX example 1 
● Define a design (an heirarchical data structure) 
● define Example { 
A (String name) { 
B (int value, C cRef) 
} 
C (String cName) 
}
SkeletonX example 2 
public class Main { 
@link A { 
public AClass doStuff[doStuff,$name]() { 
return new Aclass(@link B $value); 
} 
} 
} 
@link A { 
public class AClass[$name, Class] { 
@constructor ( @link B int value) { } 
} 
}
SkeletonX example 3 
● In user code: 
DesignRoot r; 
CBlock c = r.addCBlock(''Simple''); 
r.addABlock(''First'').addBBlock(42, c); 
ABlock a2 = r.addABlock(''Second''); 
a2.addBBlock(64, c); 
a2.addBBlock(35, c);
SkeletonX example 4 
public class Main { 
public FirstClass doStuffFirst() { 
return new FirstClass(42); 
} 
public SecondClass doStuffSecond() { 
return new SecondClass(64,35); 
} 
} 
public class FirstClass { 
public FirstClass(int value) { } 
} 
public class SecondClass { 
Public SecondClass(int value, int value2) { } 
}
Other projects 
● Munky 
● A unified language for making web apps that 
compiles to HTML/Javascript/PHP/SQL 
● Also, a related java based framework 
● Very cool. 
● At some point, a game-making tool designed 
for young children in a class room setting 
(eg, centralised storage/sharing)
HELP! (Conclusion) 
● Lots of things to do 
● Lots of projects 
● Write paper on AustenX 
● Not much money 
● Looking for part time work, or funding 
● Also, love to have access to journals again... 
scratchy.org.nz

More Related Content

What's hot

18. Dictionaries, Hash-Tables and Set
18. Dictionaries, Hash-Tables and Set18. Dictionaries, Hash-Tables and Set
18. Dictionaries, Hash-Tables and SetIntro C# Book
 
Data structure and algorithm using java
Data structure and algorithm using javaData structure and algorithm using java
Data structure and algorithm using javaNarayan Sau
 
Functional Programming by Examples using Haskell
Functional Programming by Examples using HaskellFunctional Programming by Examples using Haskell
Functional Programming by Examples using Haskellgoncharenko
 
Lecture11 standard template-library
Lecture11 standard template-libraryLecture11 standard template-library
Lecture11 standard template-libraryHariz Mustafa
 
Advance data structure & algorithm
Advance data structure & algorithmAdvance data structure & algorithm
Advance data structure & algorithmK Hari Shankar
 
Data structures and algorithms
Data structures and algorithmsData structures and algorithms
Data structures and algorithmsJulie Iskander
 
Algorithm Complexity and Main Concepts
Algorithm Complexity and Main ConceptsAlgorithm Complexity and Main Concepts
Algorithm Complexity and Main ConceptsAdelina Ahadova
 
Lecture02 class -_templatev2
Lecture02 class -_templatev2Lecture02 class -_templatev2
Lecture02 class -_templatev2Hariz Mustafa
 
C++ Standard Template Library
C++ Standard Template LibraryC++ Standard Template Library
C++ Standard Template LibraryIlio Catallo
 
Logic programming a ruby perspective
Logic programming a ruby perspectiveLogic programming a ruby perspective
Logic programming a ruby perspectiveNorman Richards
 
Python bootcamp - C4Dlab, University of Nairobi
Python bootcamp - C4Dlab, University of NairobiPython bootcamp - C4Dlab, University of Nairobi
Python bootcamp - C4Dlab, University of Nairobikrmboya
 
Haskell for data science
Haskell for data scienceHaskell for data science
Haskell for data scienceJohn Cant
 
Seq2Seq (encoder decoder) model
Seq2Seq (encoder decoder) modelSeq2Seq (encoder decoder) model
Seq2Seq (encoder decoder) model佳蓉 倪
 
Scala for Java Developers
Scala for Java DevelopersScala for Java Developers
Scala for Java DevelopersMartin Ockajak
 
Lowest common ancestor
Lowest common ancestorLowest common ancestor
Lowest common ancestorShakil Ahmed
 
SQL Server Select Topics
SQL Server Select TopicsSQL Server Select Topics
SQL Server Select TopicsJay Coskey
 
Comparing Haskell & Scala
Comparing Haskell & ScalaComparing Haskell & Scala
Comparing Haskell & ScalaMartin Ockajak
 

What's hot (20)

18. Dictionaries, Hash-Tables and Set
18. Dictionaries, Hash-Tables and Set18. Dictionaries, Hash-Tables and Set
18. Dictionaries, Hash-Tables and Set
 
Data structure and algorithm using java
Data structure and algorithm using javaData structure and algorithm using java
Data structure and algorithm using java
 
Functional Programming by Examples using Haskell
Functional Programming by Examples using HaskellFunctional Programming by Examples using Haskell
Functional Programming by Examples using Haskell
 
Lecture11 standard template-library
Lecture11 standard template-libraryLecture11 standard template-library
Lecture11 standard template-library
 
Searching Algorithms
Searching AlgorithmsSearching Algorithms
Searching Algorithms
 
Advance data structure & algorithm
Advance data structure & algorithmAdvance data structure & algorithm
Advance data structure & algorithm
 
Data structures and algorithms
Data structures and algorithmsData structures and algorithms
Data structures and algorithms
 
Pune Clojure Course Outline
Pune Clojure Course OutlinePune Clojure Course Outline
Pune Clojure Course Outline
 
Algorithm Complexity and Main Concepts
Algorithm Complexity and Main ConceptsAlgorithm Complexity and Main Concepts
Algorithm Complexity and Main Concepts
 
Lecture02 class -_templatev2
Lecture02 class -_templatev2Lecture02 class -_templatev2
Lecture02 class -_templatev2
 
C++ Standard Template Library
C++ Standard Template LibraryC++ Standard Template Library
C++ Standard Template Library
 
Logic programming a ruby perspective
Logic programming a ruby perspectiveLogic programming a ruby perspective
Logic programming a ruby perspective
 
Clojure intro
Clojure introClojure intro
Clojure intro
 
Python bootcamp - C4Dlab, University of Nairobi
Python bootcamp - C4Dlab, University of NairobiPython bootcamp - C4Dlab, University of Nairobi
Python bootcamp - C4Dlab, University of Nairobi
 
Haskell for data science
Haskell for data scienceHaskell for data science
Haskell for data science
 
Seq2Seq (encoder decoder) model
Seq2Seq (encoder decoder) modelSeq2Seq (encoder decoder) model
Seq2Seq (encoder decoder) model
 
Scala for Java Developers
Scala for Java DevelopersScala for Java Developers
Scala for Java Developers
 
Lowest common ancestor
Lowest common ancestorLowest common ancestor
Lowest common ancestor
 
SQL Server Select Topics
SQL Server Select TopicsSQL Server Select Topics
SQL Server Select Topics
 
Comparing Haskell & Scala
Comparing Haskell & ScalaComparing Haskell & Scala
Comparing Haskell & Scala
 

Viewers also liked

Viewers also liked (11)

2014_FPO_Novikov
2014_FPO_Novikov2014_FPO_Novikov
2014_FPO_Novikov
 
Gerasimova Anastasia. Presentation
Gerasimova Anastasia. PresentationGerasimova Anastasia. Presentation
Gerasimova Anastasia. Presentation
 
About Jerry
About JerryAbout Jerry
About Jerry
 
2014 Novikov FPO
2014 Novikov FPO2014 Novikov FPO
2014 Novikov FPO
 
Communication
CommunicationCommunication
Communication
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled Presentation
 
Marketresearchbilegtsaikhan 131206013942-phpapp01
Marketresearchbilegtsaikhan 131206013942-phpapp01Marketresearchbilegtsaikhan 131206013942-phpapp01
Marketresearchbilegtsaikhan 131206013942-phpapp01
 
2014 novikov fpo
2014 novikov fpo2014 novikov fpo
2014 novikov fpo
 
золота двадцятка
золота двадцятказолота двадцятка
золота двадцятка
 
TESIS DE PLAN ESTRATÉGICO
TESIS DE PLAN ESTRATÉGICOTESIS DE PLAN ESTRATÉGICO
TESIS DE PLAN ESTRATÉGICO
 
TESIS DE PLAN ESTRATÉGICO
TESIS DE PLAN ESTRATÉGICOTESIS DE PLAN ESTRATÉGICO
TESIS DE PLAN ESTRATÉGICO
 

Similar to Austen x talk

Introduction to Erlang
Introduction to ErlangIntroduction to Erlang
Introduction to ErlangGabriele Lana
 
Meetup C++ A brief overview of c++17
Meetup C++  A brief overview of c++17Meetup C++  A brief overview of c++17
Meetup C++ A brief overview of c++17Daniel Eriksson
 
EdSketch: Execution-Driven Sketching for Java
EdSketch: Execution-Driven Sketching for JavaEdSketch: Execution-Driven Sketching for Java
EdSketch: Execution-Driven Sketching for JavaLisa Hua
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to pythonAhmed Salama
 
Design and Analysis of Algorithms Lecture Notes
Design and Analysis of Algorithms Lecture NotesDesign and Analysis of Algorithms Lecture Notes
Design and Analysis of Algorithms Lecture NotesSreedhar Chowdam
 
Scalable JavaScript
Scalable JavaScriptScalable JavaScript
Scalable JavaScriptYnon Perek
 
C++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptxC++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptxAbhishek Tirkey
 
C++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptxC++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptxGauravPandey43518
 
PostgreSQL 8.4 TriLUG 2009-11-12
PostgreSQL 8.4 TriLUG 2009-11-12PostgreSQL 8.4 TriLUG 2009-11-12
PostgreSQL 8.4 TriLUG 2009-11-12Andrew Dunstan
 
Data efficiency on BEAM - Choose the right data representation by Dmytro Lyto...
Data efficiency on BEAM - Choose the right data representation by Dmytro Lyto...Data efficiency on BEAM - Choose the right data representation by Dmytro Lyto...
Data efficiency on BEAM - Choose the right data representation by Dmytro Lyto...Magnus Sedlacek
 
Interpreter Design Pattern in Javascript
Interpreter Design Pattern in JavascriptInterpreter Design Pattern in Javascript
Interpreter Design Pattern in JavascriptDmytro Verbovyi
 
Query hierarchical data the easy way, with CTEs
Query hierarchical data the easy way, with CTEsQuery hierarchical data the easy way, with CTEs
Query hierarchical data the easy way, with CTEsMariaDB plc
 
Advanced memory allocation
Advanced memory allocationAdvanced memory allocation
Advanced memory allocationJoris Bonnefoy
 
Brief introduction to Algorithm analysis
Brief introduction to Algorithm analysis Brief introduction to Algorithm analysis
Brief introduction to Algorithm analysis Anantha Ramu
 

Similar to Austen x talk (20)

Introduction to Erlang
Introduction to ErlangIntroduction to Erlang
Introduction to Erlang
 
Meetup C++ A brief overview of c++17
Meetup C++  A brief overview of c++17Meetup C++  A brief overview of c++17
Meetup C++ A brief overview of c++17
 
EdSketch: Execution-Driven Sketching for Java
EdSketch: Execution-Driven Sketching for JavaEdSketch: Execution-Driven Sketching for Java
EdSketch: Execution-Driven Sketching for Java
 
Porting to Python 3
Porting to Python 3Porting to Python 3
Porting to Python 3
 
Lua Study Share
Lua Study ShareLua Study Share
Lua Study Share
 
Python lecture 05
Python lecture 05Python lecture 05
Python lecture 05
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to python
 
Task and Data Parallelism
Task and Data ParallelismTask and Data Parallelism
Task and Data Parallelism
 
Design and Analysis of Algorithms Lecture Notes
Design and Analysis of Algorithms Lecture NotesDesign and Analysis of Algorithms Lecture Notes
Design and Analysis of Algorithms Lecture Notes
 
CODEsign 2015
CODEsign 2015CODEsign 2015
CODEsign 2015
 
Scalable JavaScript
Scalable JavaScriptScalable JavaScript
Scalable JavaScript
 
C++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptxC++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptx
 
C++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptxC++ STL (quickest way to learn, even for absolute beginners).pptx
C++ STL (quickest way to learn, even for absolute beginners).pptx
 
Dart workshop
Dart workshopDart workshop
Dart workshop
 
PostgreSQL 8.4 TriLUG 2009-11-12
PostgreSQL 8.4 TriLUG 2009-11-12PostgreSQL 8.4 TriLUG 2009-11-12
PostgreSQL 8.4 TriLUG 2009-11-12
 
Data efficiency on BEAM - Choose the right data representation by Dmytro Lyto...
Data efficiency on BEAM - Choose the right data representation by Dmytro Lyto...Data efficiency on BEAM - Choose the right data representation by Dmytro Lyto...
Data efficiency on BEAM - Choose the right data representation by Dmytro Lyto...
 
Interpreter Design Pattern in Javascript
Interpreter Design Pattern in JavascriptInterpreter Design Pattern in Javascript
Interpreter Design Pattern in Javascript
 
Query hierarchical data the easy way, with CTEs
Query hierarchical data the easy way, with CTEsQuery hierarchical data the easy way, with CTEs
Query hierarchical data the easy way, with CTEs
 
Advanced memory allocation
Advanced memory allocationAdvanced memory allocation
Advanced memory allocation
 
Brief introduction to Algorithm analysis
Brief introduction to Algorithm analysis Brief introduction to Algorithm analysis
Brief introduction to Algorithm analysis
 

Austen x talk

  • 1. AustenX AustenX: a parser generator with some novel features Presented by Matthew Goode scratchy.org.nz
  • 2. Overview ● AustenX is a parser generator built using Java ● But target languages will extend beyond Java ● It is based on Parsing Expression Grammars (PEGs), and uses Packrat memorisation ● Provides extensions to PEGs, and also handles left-recursion well (not so easy with PEG parsers) – with an interesting solution to a an interesting theorectical problem that has practical uses. ● AustenX is built using a code-generator code generator tool, called SkeletonX, which is interesting in its own right.
  • 3. Parser Generators ● Given a grammar, generate code to facilitate reading text files ● Parsing Expression Grammar a form of grammar, that unlike context-free, is unambigiuous (not based on generation). ● Eg: ● 'Hello' 'A'+ ● 'A'* 'B'? 'A' / 'B' ● E = { E '+' E } / NUMBER
  • 4. Examples ● Hello = 'Hello' ● ManyAs = 'A'+ ● AsAndMaybeB = 'A'* 'B'? ● AorB = 'A' / 'B' BOrBA = 'B' / 'BA' ● E = { NUMBER { '+' NUMBER } * } / NUMBER ● AFollowedByB = 'A' & 'B' ● AnotFollowedByB = 'A' ! 'B'
  • 5. Recursive Descent ● PEGs are easy to translate to code ● Eg FunctionCall = ID '(' Arguments ')' 'A'* function readFunctionCall() { if(!readID()) reset() return fail if(!consume('(') reset() return fail if(!readArguments() ) reset() return fail if(!consume(')') reset() return fail while(consume('A')) {} }
  • 6. Redundant Calls ● Like doing a Fibonacci calculation ● Dynamic programming solution ● Create a table of Rules x Positions ● Starting at end, calculate Rule at each position ● Previous rules only require later rules ● Packrat parsing ● Start at beginning, only do resolution when requested, store result
  • 7. Example 4 + 3 * 2 A A A Add Mult As Exp Hello Stuff
  • 8. Left Recursion ● Recursive Descent and Packrat parsing has problems with left recursion ● EG ● E = {E '+' E } / Number ● Creates infinite loops function readE() { readE() ... }
  • 9. Solution ● 'Bubble up' resolutions ● Eg 1 + 2 ● First pass, no resolution, so E '+' E fails, but Num consumes the 1 ● Current best => E = Num ( '1' ) ● Retry until no more gains ● E = ('1') + ('2')
  • 10. Problem ● Always right associative ● Eg E = { E '+' E } / { E '*' E } / Num ● Always resolves 1 * 2 + 3 to ( (1) * ( (2) + (3) ) ● Eg E = { E '*' E } / { E '+' E } / Num ● Also resolves 1 * 2 + 3 to ( (1) * ( (2) + (3) )! ● Problem only occurs when there is a right recursion of rule with left recursion
  • 11. Solution ● A process of reinterpreting/rewriting ● Recall 1 * 2 + 3, with E = { E '+' E } / { E '*' E } / Num ● Resolution at '2' is ((2) + (3)) ● If resolved '(1) ', note that '+' is higher priority than '*', so search recursion to find lower – eg (2) ● Now resolved to ((1) * (2)) ● Bubble up to get (((1) * (2)) + 3)
  • 12. Back to AustenX ● Currently uses seperate tokenisation ● A DFA (Lex-like) tokeniser included ● Allows the left-recursion discussed, with indirect and direct recursion ● Allows selective memorisation ● Provides statistics on use ● Turns out memorisation (at least with tokenisation) is mostly not needed ● Has extensions to PEG
  • 13. Example grammar pattern Example2 { Add ( Example2:left PLUS Example2:right ) Number ( NUMBER:value ) ID ( ID:value ) } pattern Example1( ID:name STRING Example2:first ID Example2 )
  • 14. Extended PEGs ● Easy split ● (AustenX uses '|' for 'or') ● Arguments = Arugment / Comma ● Variables and queries ● Pattern Fib [$x=0 $y=0 $next=0 $t = 0 $l = 2]( $x=INT $y=INT { $t = $x +$y $next = INT ($t==$next) $x = $y $y = $next $l++ } * $l:length )
  • 16. Future directions ● Better error handling ● Improved tokenisation ● With scanner-free, and binary modes ● New language targets ● Support for indentation-sensitive languages ● Formal (or at least informal) write-up of ordered left recursion
  • 17. SkeletonX ● AustenX is a code generator ● SkeletonX is a tool for making code generators. It is a code generator code generator. ● Not just a template engine! ● It understands (a subset of) Java ● Currently going through many iterations to get a version that uses itself (not quite there yet) ● Many headaches over how scope should work
  • 18. SkeletonX example 1 ● Define a design (an heirarchical data structure) ● define Example { A (String name) { B (int value, C cRef) } C (String cName) }
  • 19. SkeletonX example 2 public class Main { @link A { public AClass doStuff[doStuff,$name]() { return new Aclass(@link B $value); } } } @link A { public class AClass[$name, Class] { @constructor ( @link B int value) { } } }
  • 20. SkeletonX example 3 ● In user code: DesignRoot r; CBlock c = r.addCBlock(''Simple''); r.addABlock(''First'').addBBlock(42, c); ABlock a2 = r.addABlock(''Second''); a2.addBBlock(64, c); a2.addBBlock(35, c);
  • 21. SkeletonX example 4 public class Main { public FirstClass doStuffFirst() { return new FirstClass(42); } public SecondClass doStuffSecond() { return new SecondClass(64,35); } } public class FirstClass { public FirstClass(int value) { } } public class SecondClass { Public SecondClass(int value, int value2) { } }
  • 22. Other projects ● Munky ● A unified language for making web apps that compiles to HTML/Javascript/PHP/SQL ● Also, a related java based framework ● Very cool. ● At some point, a game-making tool designed for young children in a class room setting (eg, centralised storage/sharing)
  • 23. HELP! (Conclusion) ● Lots of things to do ● Lots of projects ● Write paper on AustenX ● Not much money ● Looking for part time work, or funding ● Also, love to have access to journals again... scratchy.org.nz