Skip to content

VikramjeetD/VIPAR

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VIPAR: A LALR (1) lexer & parser

Vipar is a LALR(1) lexer and parser for a context-free grammar generating a Python-like language, written in Java.

EBNF Grammar

Upper case used for non-terminals, lower case for terminals. (WARNING: Its quite long...)
S -> PROGRAM
PROGRAM -> PREMAINDECLARATIONS MAINFUNC {FUNC}
PREMAINDECLARATIONS -> DECLARATION ';' PREMAINDECLARATIONS | ϵ
MAINFUNC -> func main '(' ')' '{' STMTLIST '}'
STMTLIST -> STMT STMTLIST | ϵ
STMT -> CONDITIONAL | LOOP | DECLARATION | ASSIGNMENT | FUNCCALL
CONDITIONAL -> IF | SWITCH
IF -> if '(' CONDITION ')' '{' STMTLIST '}' {ELSEIFS} [ELSE]
ELSE -> else '{' STMTLIST '}'
ELSEIFS -> elif '(' CONDITION ')' '{' STMTLIST '}'
SWITCH -> switch '(' EXPR ')' '{' {CASE} '}'
CASE -> case EXPR '{' STMTLIST '}'
LOOP -> FORLOOP | WHILELOOP
FORLOOP -> for variable in variable LOOPOP variable [STEP] '{' STMTLIST '}'
LOOPOP -> ... | ..<
STEP -> step variable
WHILELOOP -> while '(' CONDITION ')' '{' STMTLIST '}'
DECLARATION -> var VARDECLLIST
VARDECLLIST -> variable : VARTYPE OPTASSIGNRHS {MOREDECLS}
MOREDECLS -> , variable : VARTYPE [ASSIGNRHS]
OPTASSIGNRHS -> = ASSIGNRHS
ASSIGNMENT -> variable = ASSIGNRHS
ASSIGNRHS -> EXPR
ASSIGNRHS -> EXPR if CONDITION else EXPR
FUNCCALL -> FUNCCALLRHS
FUNCCALLRHS -> variable ( [ACTPARAMLIST] )
ACTPARAMLIST -> VAROREXP {MOREPARAMS}
MOREPARAMS -> , VAROREXP
VAROREXP -> EXPR
FUNC -> func variable ( [FUNCPARAMS] ) arrow RETTYPE { FUNCSTMT }
FUNCSTMT -> STMTLIST [RETURN]
OPTRETURN -> return EXPR ;
FUNCPARAMS -> variable : VARTYPE {MOREFUNCPARAMS}
MOREFUNCPARAMS -> , variable : VARTYPE
RETTYPE -> VARTYPE | void
CONDITION -> [!] SCONDITION [(&& | ||) SCONDITION]
SCONDITION -> EXPR RELOP EXPR | ( CONDITION )
RELOP -> < | < | <= | >= | == | !=
EXPR -> SUBEXPR [(+ | - | * | / | ^ | % | & | |) SUBEXPR]
SUBEXPR -> variable | ( EXPR ) | FUNCCALLRHS
VARTYPE -> int | real | string

Here's the corresponding BNF Grammar (Psst... Its even longer!) and the parse table (this is the biggest!)

Usage

Write some code and change the file name in the Runner class (extension doesn't really matter, but its cool to have your "own extension" :D). We've provided some sample valid code in code0.vipar, code1.vipar and code2.vipar

Visualization

A beautiful parse tree is created in the outputs folder. The green leaves are the terminals which are actually part of the code. The red leaves expand to the null string. Feel free to open the .html files we've included for our sample code!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •