ANALYSE.RIG 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. --:** See error message in line 6
  2. -- parsing of Prof. Blikle small language
  3. --
  4. -- file ANALYSE.RIG
  5. --
  6. #analyse_program
  7. (. (* $rez !.:= #analyse_stmt * ';' ) [ ';' ] .)
  8. --:-----^
  9. --:** 323 UNEXPECTED SYMBOL (END OF '<<'-STATEMENT NOT FOUND)
  10. --:** **************************************************
  11. --:** **************************************************
  12. / RETURN $rez / ##
  13. #analyse_stmt
  14. $rez := ( #assignment ! #while_op ) / RETURN $rez/ ;;
  15. (* $R !.:= S'( $$ <> ';' ) *)
  16. / report << unrecognised statement $R ; FAIL /
  17. ##
  18. #assignment
  19. $var := #variable ':=' $E := #expression V'( $$ = ';' OR $$ = 'OD')
  20. / RETURN 'assignment_op' :: <. left_part: $var,
  21. right_part: $E .> / ##
  22. #while_op
  23. 'WHILE' $E := #expression 'DO'
  24. (* $body !.:= #analyse_stmt * ';' )
  25. 'OD'
  26. / RETURN 'while_op' :: <. condition: $E,
  27. body: $body .> / ##
  28. #expression
  29. $a1 := #arithm_expr
  30. [ '<' $a2 := #arithm_expr
  31. / RETURN '<' :: <. arg1: $a1, arg2: $a2 .>/ ]
  32. / RETURN $a1 / ##
  33. #arithm_expr
  34. $a1 := #term / RETURN $a1 / ;;
  35. '(' $a1 := #arithm_expr '+' $a2 := #arithm_expr ')'
  36. / RETURN '+' :: <. arg1: $a1, arg2: $a2 .> / ##
  37. #term
  38. $NUM / RETURN $NUM / ;;
  39. $rez := #variable /RETURN $rez / ##
  40. #variable
  41. $R := ( W ! V ! X ! Y ! Z ) / RETURN $R / ##