Yeah, that could work... if we lived in bizarro world where all the developers actually liked COBOL!
If I know software engineers, over their dead bodies! On 06/07/2009, Neil Harris <[email protected]> wrote: > stevertigo wrote: >> On Mon, Jul 6, 2009 at 3:54 AM, Neil Harris<[email protected]> >> wrote: >> >> >>> Consider the difference between the ease of writing, say, the Python-like >>> print "%02x" % find(":", param[1]) >>> or even the Lisp-like >>> (print (fmt "%02x" (find ":" (param 1)))) >>> compared to writing an "English-like" equivalent such as >>> PRINT THE NUMBER OF CHARACTERS BEFORE THE FIRST OCCURRENCE OF THE >>> COLON CHARACTER IN THE FIRST POSITIONAL PARAMETER FORMATTED AS A >>> TWO-DIGIT ZERO-PADDED HEXADECIMAL NUMBER USING LOWERCASE LETTERS FOR THE >>> HEX DIGITS A TO F >>> >> >> Your example is a bit unfair though, Neil. For one, how would it be >> parsed? >> Two, it only implies and does not explicitly state the "find/search" >> functionality >> you use in the examples. >> > Oh, don't tempt me to write an implementation... a grammar for it might > look something like this: > > command ::= print-expr | ... > > expr ::= find-expr | param-expr | arithmetic-expr | strong-expr > > no-default-param-expr ::= "THE" ordinal-number-name "POSITIONAL > PARAMETER" | "THE PARAMETER CALLED" name-expr > > param-expr ::= no-default-param-expr ["UNLESS THE PARAMETER IS > UNDEFINED, IN WHICH CASE USE" expr "INSTEAD"] > > find-expr ::= "THE NUMBER OF CHARACTERS BEFORE THE FIRST OCCURRENCE OF" > expr "IN" expr > > arithmetic-expr ::= expr "MULTIPLIED BY" expr | expr "ADDED TO" expr | > ... | "OPEN BRACKETS" expr "CLOSE BRACKETS" > > substitution-expr ::= "THE STRING" expr ", SUBSTITUTING THE STRING" expr > "FOR THE STRING" expr "THROUGHOUT" > > string-expr ::= "THE" char-name "CHARACTER" > > print-statement ::= "PRINT" expr "FORMATTED AS" print-format > > print-format-atom ::= "A LITERAL STRING" | "A" ordinal-number-name > "-DIGIT" [ "ZERO-PADDED" ] ["HEXADECIMAL" | "OCTAL" | "DECIMAL" ] > "NUMBER" ["USING" ["UPPERCASE" | "LOWERCASE" "LETTERS FOR THE HEX DIGITS > A TO F"] > > print-format ::= print-format-atom | print-format-atom "FOLLOWED BY" > print-format > > ordinal-number-name ::= "FIRST" | "SECOND" | "THIRD" | "FOURTH" ... > > cardinal-number-name ::= "ONE" | "TWO" | "THREE" | "FOUR" ... > > and then throw it at a packrat parser or similar shortest-length parser > for nondeterministic languages... I leave code generation and the > runtime environment as an exercise for the student. To keep fully within > the spirit of the exercise, don't forget to add automatic type coercion > of all data types to strings wherever necessary. > > -- Neil > > > _______________________________________________ > WikiEN-l mailing list > [email protected] > To unsubscribe from this mailing list, visit: > https://lists.wikimedia.org/mailman/listinfo/wikien-l > -- -Ian Woollard "All the world's a stage... but you'll grow out of it eventually." _______________________________________________ WikiEN-l mailing list [email protected] To unsubscribe from this mailing list, visit: https://lists.wikimedia.org/mailman/listinfo/wikien-l
