[WikiEN-l] MediaWiki is getting a new programming language

Ian Woollard ian.woollard at gmail.com
Mon Jul 6 21:56:18 UTC 2009


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 <usenet at tonal.clara.co.uk> wrote:
> stevertigo wrote:
>> On Mon, Jul 6, 2009 at 3:54 AM, Neil Harris<usenet at tonal.clara.co.uk>
>> 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
> WikiEN-l at lists.wikimedia.org
> 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."



More information about the WikiEN-l mailing list