Quick actions

cmd+k|ctrl+k

Navigation

Languages

Shane's Turing complete language

Snippet info

Language

Raku

Visibility

public

Author

raiph

Created

2019-09-06T21:37:37Z

Updated

2019-09-07T17:38:20Z

# See https://www.reddit.com/r/ProgrammingLanguages/comments/d076go/how_to_write_a_turingcomplete_programming/ezaqcs2
grammar Shane's-Turing-complete-language {

  rule TOP       { <.ws> <stmts> }
  rule stmts     { <expr>+ }
  rule expr      { <ifExpr> | <whileExpr> | <opExpr> | <storeSet> | <storeGet> | <value> }

  rule ifExpr    { 'if'    <stmts> 'then' <stmts> [ 'else' <stmts> ]? 'end' }
  rule whileExpr { 'while' <stmts> 'do'   <stmts>                     'end' }

  rule storeSet  { [ '[' <stmts> ']' | <var> ] '=' <expr> }
  rule storeGet  { '[' <stmts> ']' | <var> }

  my @keywords = < if then else while do end >; 
  token var      { :i <!before @keywords> <[_a..z]> \w* }

  my @ops = <<   <= >= == - + * / < >   >>;
  token op       { @ops }
  rule opExpr    { <op> <expr> <expr> }

  token value    { '-'? <[0..9]>+ }
}

given Shane's-Turing-complete-language.parse: slurp 'sieve-code' { .Str.say for .<stmts><expr> }
INFO