ANALYSE.RIG 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. -- parsing of Prof. Blikle small language
  2. --
  3. -- file ANALYSE.RIG
  4. --
  5. #analyse_program
  6. (. (* $rez !.:= #analyse_stmt * ';' ) [ ';' ] .)
  7. / RETURN $rez / ##
  8. #analyse_stmt
  9. $rez := ( #assignment ! #while_op ) / RETURN $rez/ ;;
  10. (* $R !.:= S'( $$ <> ';' ) *)
  11. / report << unrecognised statement $R ; FAIL /
  12. ##
  13. #assignment
  14. $var := #variable ':=' $E := #expression V'( $$ = ';' OR $$ = 'od')
  15. / RETURN 'assignment_op' :: <. left_part: $var,
  16. right_part: $E .> / ##
  17. #while_op
  18. 'while' $E := #expression 'do'
  19. (* $body !.:= #analyse_stmt * ';' )
  20. 'od'
  21. / RETURN 'while_op' :: <. condition: $E,
  22. body: $body .> / ##
  23. #expression
  24. $a1 := #arithm_expr
  25. [ '<' $a2 := #arithm_expr
  26. / RETURN '<' :: <. arg1: $a1, arg2: $a2 .>/ ]
  27. / RETURN $a1 / ##
  28. #arithm_expr
  29. $a1 := #term / RETURN $a1 / ;;
  30. '(' $a1 := #arithm_expr '+' $a2 := #arithm_expr ')'
  31. / RETURN '+' :: <. arg1: $a1, arg2: $a2 .> / ##
  32. #term
  33. $NUM / RETURN $NUM / ;;
  34. $rez := #variable /RETURN $rez / ##
  35. #variable
  36. $R := ( w ! v ! x ! y ! z ) / RETURN $R / ##