Skip to content

Commit

Permalink
parser: reduce code complexity
Browse files Browse the repository at this point in the history
  • Loading branch information
arxdsilva committed Oct 29, 2018
1 parent 585a63e commit 2e8fbef
Showing 1 changed file with 34 additions and 49 deletions.
83 changes: 34 additions & 49 deletions parser/parser.go
Expand Up @@ -36,7 +36,7 @@ type Parser struct {
Logger *lg.Logger
}

//next Function to shift to the next item in the list
// next Function to shift to the next item in the list
func (par *Parser) next() item {
par.prevItem = par.currentItem
par.currentItem = par.nextItem
Expand All @@ -45,71 +45,60 @@ func (par *Parser) next() item {
return par.currentItem
}

//Parse Function to parse the the Recipe File
// Parse Function to parse the the Recipe File
func (par *Parser) Parse() error {

isCompiler := false
enityName := ""
identifier := itemNULL
params := ""

for par.nextItem.typ != itemEOF {
par.next()
if par.currentItem.typ == itemEquals {
if par.nextItem.typ != itemString {
if par.prevItem.typ == itemEntity {
return par.reportError("entity")
}
}
if par.currentItem.typ == itemEquals &&
par.nextItem.typ != itemString &&
par.prevItem.typ == itemEntity {
return par.reportError("entity")
}

if par.currentItem.typ == itemSemicolon {
if par.nextItem.typ < itemKeyWord &&
par.nextItem.typ != itemRightBrace {
return par.reportError("}")
}

if isCompiler {
par.fillCompilerDetails(identifier, params)

} else {
par.fillFileDetails(enityName, identifier, params)
}
}

if par.currentItem.typ == itemLeftBrace {
if par.nextItem.typ < itemKeyWord {
return par.reportError("identifier")
}
if par.currentItem.typ == itemLeftBrace &&
par.nextItem.typ < itemKeyWord {
return par.reportError("identifier")
}

if par.currentItem.typ == itemRightBrace {
if par.nextItem.typ != itemEOF &&
par.nextItem.typ != itemEntity {
return par.reportError("entity")
}
if par.currentItem.typ == itemRightBrace &&
par.nextItem.typ != itemEOF &&
par.nextItem.typ != itemEntity {
return par.reportError("entity")
}

if par.currentItem.typ == itemString {
if par.prevItem.typ == itemEntity {
if par.nextItem.typ != itemLeftBrace {
return par.reportError("{")
}

if par.currentItem.val == "#" {
isCompiler = true
} else {
isCompiler = false
}
enityName = par.currentItem.val

if par.currentItem.typ == itemString &&
par.prevItem.typ == itemEntity {
if par.nextItem.typ != itemLeftBrace {
return par.reportError("{")
}
if par.currentItem.val == "#" {
isCompiler = true
} else {
if par.nextItem.typ != itemSemicolon {
return par.reportError(";")
}
params = par.currentItem.val
isCompiler = false
}

enityName = par.currentItem.val
} else if par.currentItem.typ == itemString {
if par.nextItem.typ != itemSemicolon {
return par.reportError(";")
}
params = par.currentItem.val
}

if par.currentItem.typ == itemEntity {
Expand Down Expand Up @@ -148,22 +137,18 @@ func (par *Parser) reportError(expected string) error {

//fillCompilerDetails Function to store the compiler details
func (par *Parser) fillCompilerDetails(identifier itemType, param string) {
if identifier == itemBinary {
switch {
case identifier == itemBinary:
par.CompilerDetails.Binary = param
}
if identifier == itemName {
case identifier == itemName:
par.CompilerDetails.Name = param
}
if identifier == itemStart {
case identifier == itemStart:
par.CompilerDetails.Start = param
}
if identifier == itemLdFlags {
case identifier == itemLdFlags:
par.CompilerDetails.LdFlags = param
}
if identifier == itemIncludes {
case identifier == itemIncludes:
par.CompilerDetails.Includes = param
}
if identifier == itemOthers {
case identifier == itemOthers:
par.CompilerDetails.OtherFlags = param
}
}
Expand Down

0 comments on commit 2e8fbef

Please sign in to comment.