Użyta gramatyka - patrykkurczyna/ClojureInterpreter GitHub Wiki

Rozpoznawany język jest zgodny z załączoną gramatyką:

input -> expr_list

expr_list -> expr_list expression

expression -> '(' ID expr_list ')'
expression -> '(' DEFUN ID list expr_list ')'
expression -> '(' LOOP expression expr_list ')'
expression -> atom

atom -> INTEGER
atom -> FLOAT
atom -> STRING
atom -> BRACKET expr_list ')'
atom -> idname

idname -> ID

list -> '(' ')'
list -> '(' expr_list '.' expression ')'
list -> '(' expr_list ')'

Tokeny rozpoznajemy następująco:

  • FLOAT
    r"-?(\d+(.\d*)|.\d+)"

  • INTEGER
    r"-?\d+"

  • STRING
    r'"([^\\n]|(\.))*?"'

  • ID
    r"[a-zA-Z_]\w*|+|-|/|*|<=|>=|<|>"

Gdy znajdziemy token 'defun' lub 'loop' to zmieniamy jego typ z ID na odpowiednio 'DEFUN' lub 'LOOP'.

  • BRACKET
    r''('

  • COMMENT
    r'[;][^\n]*'

Komentarze rozpoczynają się średnikiem i kończą się znakiem końca linii.

⚠️ **GitHub.com Fallback** ⚠️