Herbert is programmed in a simple but powerful language called "h". "h" contains elements of traditional high-level languages: statements, procedures, parameters, arguments, and recursion. However, "h" is syntactically simpler, and contains some concepts (procedural arguments) that are not found in traditional languages. Here are the basic elements of "h":
|
Statement | s(go straight), r (turn right), or l (turn left), a procedure call, or a procedural parameter. | s | Procedure definition | x[(P1,P2,...,Pk)]:y1y2y3...yn where x is any lowercase letter (except s, r, or l), Pi is a parameter, yi is any statement, 0 <= k <=15, and n >= 0. If k = 0 (no parameters) then the parentheses are not used. | a:ssssr b(C,D):sra(B)C | Parameter | X where X is any uppercase letter. | A | Expression | [-] X [(+ or -) X [(+ or -) X [(+ or -) X ... ]]] where each X is either a numeric parameter or a number. | 5 A-5 -A-B-C+1 | Argument | Any number, expression, or sequence of zero or more statements. | 4 rsr A-1 | Procedure call | x[(a1,a2,...,ak)] where x is the name of a procedure and ai is an argument (one for each parameter). If k = 0 (no parameters) then the parentheses are not used. No call is made if any numeric argument is 0 or less. | a(1,B-1,srs) b | Recursion | x[(P1,P2,...,Pk)]:y1y2y3...ymx[(a1,a2,a3,..,ak)]ym+1ym+2ym+3...yn where x is any lowercase letter (except s, r, or l), Pi is a parameter, ai is an argument, yi is any statement, 0<= k <= 15, m >= 0, and n >= 0. | a(A):sa(A-1) b:sssrb | Main Procedure | y1y2y3...yn where yi is any statement and n >= 1. | sa(1,rsr)r | Program |
<procedure definition> : : <main procedure>
| a:ssssra sssa | Byte | Any lowercase or uppercase letter, or any number | s A 123 | |