Skip to content
This repository was archived by the owner on Mar 16, 2020. It is now read-only.

LL Grammar

scr4bble edited this page Dec 14, 2014 · 28 revisions

Grammar

PROGRAM → VAR_DECLR FUNC COMPOUND_STMT .

VAR_DECLR → var VAR_DEF
VAR_DECLR → ε
VAR_DEF → id : type ; VAR_DEFN
VAR_DEFN → id : type ; VAR_DEFN
VAR_DEFN → ε

FUNC → function id PARAM_DEF_LIST : type ; FORWARD FUNC
FUNC → ε
FORWARD → forward ;
FORWARD → VAR_DECLR COMPOUND_SEMICOLON_STMT

PARAM_DEF_LIST → ( PARAMS_DEF )
PARAMS_DEF → id : type PARAMS_DEF_N
PARAMS_DEF → ε
PARAMS_DEF_N → ; id : type PARAMS_DEF_N
PARAMS_DEF_N → ε

TERM_LIST → ( TERMS )
TERMS → term TERMS_N
TERMS_N → , term TERMS_N
TERMS_N → ε

COMPOUND_STMT → begin STMT_E end
COMPOUND_SEMICOLON_STMT → COMPOUND_STMT ;
STMT_LIST → ε
STMT_LIST → ; STMT STMT_LIST
STMT_E → STMT STMT_LIST
STMT_E → ε
STMT → id := EXPR
STMT → if EXPR then COMPOUND_STMT IF_N
STMT → while EXPR do COMPOUND_STMT
STMT → repeat STMT STMT_LIST until EXPR 
STMT → COMPOUND_STMT
STMT → readln ( id )
STMT → write TERM_LIST

IF_N → else COMPOUND_STMT
IF_N → ε
PROGRAM -> VAR_DECLR FUNC COMPOUND_STMT .
VAR_DECLR -> var VAR_DEF .
VAR_DECLR ->  .
VAR_DEF -> id : type ; VAR_DEFN .
VAR_DEFN -> id : type ; VAR_DEFN .
VAR_DEFN ->  .
FUNC -> function id PARAM_DEF_LIST : type ; FORWARD FUNC .
FUNC ->  .
FORWARD -> forward ; .
FORWARD -> VAR_DECLR COMPOUND_SEMICOLON_STMT .
PARAM_DEF_LIST -> ( PARAMS_DEF ) .
PARAMS_DEF -> id : type PARAMS_DEF_N .
PARAMS_DEF ->  .
PARAMS_DEF_N -> ; id : type PARAMS_DEF_N .
PARAMS_DEF_N ->  .
TERM_LIST -> ( TERMS ) .
TERMS -> term TERMS_N .
TERMS_N -> , term TERMS_N .
TERMS_N-> .
COMPOUND_STMT -> begin STMT_E end .
COMPOUND_SEMICOLON_STMT -> COMPOUND_STMT ; .
STMT_LIST ->  .
STMT_LIST -> ; STMT STMT_LIST .
STMT_E -> .
STMT_E -> STMT STMT_LIST.
STMT -> id := EXPR .
STMT -> if EXPR then COMPOUND_STMT IF_N .
STMT -> while EXPR do COMPOUND_STMT .
STMT -> repeat STMT STMT_LIST until EXPR .
STMT -> COMPOUND_STMT .
STMT -> readln ( id ) .
STMT -> write TERM_LIST .

IF_N -> else COMPOUND_STMT .
IF_N ->  .

Expressions

EXPR → var // 1 token

EXPR → - EXPR // 2+++ tokens
EXPR → not EXPR // 2+++ tokens

/* 3 tokens */
EXPR → ( EXPR )
EXPR → EXPR * EXPR
EXPR → EXPR / EXPR
EXPR → EXPR and EXPR
EXPR → EXPR + EXPR
EXPR → EXPR - EXPR
EXPR → EXPR or EXPR
EXPR → EXPR xor EXPR
EXPR → EXPR < EXPR
EXPR → EXPR > EXPR
EXPR → EXPR <= EXPR
EXPR → EXPR >= EXPR
EXPR → EXPR = EXPR
EXPR → EXPR <> EXPR

/* 3,4,6,8... tokens*/
EXPR → func ( )
EXPR → func ( arg ARGNEXT )
ARGNEXT → , arg ARGNEXT
ARGNEXT → ε


Precedence table OUTDATED

+ - * / < > <= >= = <> ( ) f , $ var
+ > > < < > > > > > > < > > > < <
- > > < < > > > > > > < > > > < <
* > > > > > > > > > > < > > > < <
/ > > > > > > > > > > < > > > < <
< < < < < > > > > > > < > > > < <
> < < < < > > > > > > < > > > < <
<= < < < < > > > > > > < > > > < <
>= < < < < > > > > > > < > > > < <
= < < < < > > > > > > < > > > < <
<> < < < < > > > > > > < > > > < <
( < < < < < < < < < < < = = < <
) > > > > > > > > > > > > >
f =
, < < < < < < < < < < < = = < <
$ < < < < < < < < < < < < <
var > > > > > > > > > > > > >

Clone this wiki locally