Home Documentation Simplicity
Simplicity PDF Print
Written by Administrator   
Monday, 26 October 2009 20:39

Number of keywords

Below you will find a comparison of the number of keywords needed to write code in different languages.
Number of keywords obviously is not the only or particularly good measure of simplicity, but it is suggestive!
Prolog 0
Lisaac 2
Smalltalk 5
Lua 21
Python 28
C99 37
Ruby 40
Java 53
PHP 53
JavaScript 59
C++98 63
C# 77
Perl 180?
Recommendations for better measures of simplicity are welcome as long as they can be objectively measured.

Grammar BNF

  PROGRAM      -> { "Section" (section|TYPE_LIST) { SLOT } } [CONTRACT ';']
  SLOT         -> style TYPE_SLOT [':' (TYPE|'('TYPE_LIST')') ][ affect DEF_SLOT ]';'
  TYPE_SLOT    -> [ LOC_ARG '.' ] identifier [ LOC_ARG { identifier LOC_ARG } ]
                | [ LOC_ARG ] '\'' operator '\'' [("Left"|"Right")  [integer]] [LOC_ARG]
  DEF_SLOT     -> [CONTRACT] EXPR [CONTRACT]
  LOC_ARG      -> identifier ':' TYPE
                | '(' LOCAL ')'
  LOCAL        -> { identifier [ ':' TYPE ] ',' } identifier ':' TYPE
  TYPE_LIST    -> TYPE { ',' TYPE }
  TYPE         -> '{' [ (TYPE | '(' TYPE_LIST ')') ';' ] [ TYPE_LIST ] '}'
                | [type] PROTOTYPE [ CONTRACT ]
  PROTOTYPE    -> cap_identifier{('.'|'...')cap_identifier}['('PARAM_TYPE{','PARAM_TYPE}')']
  PARAM_TYPE   -> TYPE | CONSTANT | identifier
  EXPR         -> { ASSIGN affect } EXPR_OPERATOR
  ASSIGN       -> '(' IDF_ASSIGN { ',' IDF_ASSIGN } ')'
                | IDF_ASSIGN
  IDF_ASSIGN   -> identifier { identifier }
  EXPR_OPERATOR-> { operator } EXPR_MESSAGE { operator {operator} EXPR_MESSAGE } {operator} 
  EXPR_MESSAGE -> EXPR_BASE { '.' SEND_MSG }
  EXPR_BASE    -> "Old" EXPR | EXPR_PRIMARY | SEND_MSG
  EXPR_PRIMARY -> "Self"
                | result | PROTOTYPE | CONSTANT | '(' GROUP ')'
                | '{' [ LOC_ARG ';' ] GROUP '}'
                | external [ ':' ['('] TYPE ['{' TYPE_LIST '}'] [')'] ]
  CONSTANT     -> integer | real | characters | string
  GROUP        -> DEF_LOCAL {EXPR ';'} [ EXPR {',' {EXPR ';'} EXPR } ]
  CONTRACT     -> '[' DEF_LOCAL { ( EXPR ';' | "..." ) } ']'
  DEF_LOCAL    -> { style LOCAL ';' }
  SEND_MSG     -> identifier [ ARGUMENT { identifier ARGUMENT } ]
  ARGUMENT     -> EXPR_PRIMARY | identifier
Last Updated on Tuesday, 10 November 2009 14:42