123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- -- Example of RIGAL program.
- -- Takes input from file EX.TXT
- -- Performs simple arithmetical expression parsing.
- -- Expression tree is returned.
- -- Polish Postfix Form is printed out.
- #MAIN
- OPEN S ' '; -- Opens file S for output to the screen
- $E:=#CALL_PAS(3 'EX.TXT'); -- Scanner takes input from file EX.TXT
- S<<$E; -- Prints the input text
- $T:=#ANALYSE($E); -- Calls expression analysis
- PRINT $T; -- Prints expression tree
- #CALL_PAS(13 $T); -- Prints expression tree in graphical form
- S<<;
- #PRINT_POLISH($T); -- Calls Polish Postfix Form printing
- ##
- #ANALYSE -- Traverses token list
- (. $E:=#EXPRESSION .) / RETURN $E /
- ##
- -- BNF form :
- #EXPRESSION -- expression ::=
- $A1:=#ADDITIVE_EL -- add_el
- (* $OP := ( '+' ! '-' ) $A2:=#ADDITIVE_EL -- ( ('+'!'-') add_el )*
- / $A1 := <. OP:$OP, ARG1:$A1 , ARG2:$A2 .> / *)
- / RETURN $A1 /
- ##
- #ADDITIVE_EL -- add_el ::=
- $A1:=#TERM -- term
- (* $OP := ( '*' ! '/' ) $A2 :=#TERM -- ( ('*'!'/') term )*
- / $A1 := <. OP:$OP, ARG1:$A1 , ARG2:$A2 .> / *)
- / RETURN $A1 /
- ##
- #TERM -- term ::=
- $A := ( $ID ! $NUM ) / RETURN $A / ;; -- (identifier ! number !
- '(' $A:=#EXPRESSION ')' / RETURN $A / -- '(' expression ')' )
- ##
- #PRINT_POLISH
- <. ARG1 : #PRINT_POLISH, -- Trees are traversed recursively
- ARG2 : #PRINT_POLISH,
- OP : $OP .>
- / S<] $OP / ;;
- $EL / S<] $EL / -- Leaves are printed immediately
- ##
|