SimpleLang Grammar
Categories
Rules
Categories
"("
")"
"*"
"+"
"-"
"/"
";"
"exit"
"print"
<<Expr-CF>>
<<Factor-CF>>
<<LAYOUT-CF>>
( ->
<<LAYOUT-LEX>>
( ->
<<[ ]+-LEX>>
)
)
<<LAYOUT-LEX>>
( ->
<<[ ]+-LEX>>
)
<<LAYOUT?-CF>>
<<Number-CF>>
( ->
<<Number-LEX>>
( ->
<<[0-9]+-LEX>>
)
)
<<Number-LEX>>
( ->
<<[0-9]+-LEX>>
)
<<Program-CF>>
( ->
<<{Stmt ";"}*-CF>>
)
<<START>>
<<Stmt-CF>>
<<Term-CF>>
<<[ ]+-LEX>>
<<[0-9]+-LEX>>
<<{Stmt ";"}*-CF>>
<<{Stmt ";"}+-CF>>
string([ ])
string([0-9])
Rules
Start rule:
<<START>>
->
<<LAYOUT?-CF>>
<<Program-CF>>
( ->
<<{Stmt ";"}*-CF>>
)
<<LAYOUT?-CF>>
<<Expr-CF>>
->
<<Expr-CF>>
<<LAYOUT?-CF>>
"+"
<<LAYOUT?-CF>>
<<Term-CF>>
<<Expr-CF>>
->
<<Expr-CF>>
<<LAYOUT?-CF>>
"-"
<<LAYOUT?-CF>>
<<Term-CF>>
<<Expr-CF>>
->
<<Term-CF>>
<<Factor-CF>>
-> "("
<<LAYOUT?-CF>>
<<Expr-CF>>
<<LAYOUT?-CF>>
")"
<<Factor-CF>>
->
<<Number-CF>>
( ->
<<Number-LEX>>
( ->
<<[0-9]+-LEX>>
)
)
<<LAYOUT-CF>>
->
<<LAYOUT-LEX>>
( ->
<<[ ]+-LEX>>
)
<<LAYOUT-LEX>>
->
<<[ ]+-LEX>>
<<LAYOUT?-CF>>
->
<<LAYOUT?-CF>>
->
<<LAYOUT-CF>>
( ->
<<LAYOUT-LEX>>
( ->
<<[ ]+-LEX>>
)
)
<<Number-CF>>
->
<<Number-LEX>>
( ->
<<[0-9]+-LEX>>
)
<<Number-LEX>>
->
<<[0-9]+-LEX>>
<<Program-CF>>
->
<<{Stmt ";"}*-CF>>
<<START>>
->
<<LAYOUT?-CF>>
<<Program-CF>>
( ->
<<{Stmt ";"}*-CF>>
)
<<LAYOUT?-CF>>
<<Stmt-CF>>
->
<<Stmt-CF>>
-> "exit"
<<Stmt-CF>>
-> "print"
<<LAYOUT?-CF>>
<<Expr-CF>>
<<Term-CF>>
->
<<Factor-CF>>
<<Term-CF>>
->
<<Term-CF>>
<<LAYOUT?-CF>>
"*"
<<LAYOUT?-CF>>
<<Factor-CF>>
<<Term-CF>>
->
<<Term-CF>>
<<LAYOUT?-CF>>
"/"
<<LAYOUT?-CF>>
<<Factor-CF>>
<<[ ]+-LEX>>
->
<<[ ]+-LEX>>
string([ ])
<<[ ]+-LEX>>
-> string([ ])
<<[0-9]+-LEX>>
->
<<[0-9]+-LEX>>
string([0-9])
<<[0-9]+-LEX>>
-> string([0-9])
<<{Stmt ";"}*-CF>>
->
<<{Stmt ";"}*-CF>>
->
<<{Stmt ";"}+-CF>>
<<{Stmt ";"}+-CF>>
->
<<Stmt-CF>>
<<{Stmt ";"}+-CF>>
->
<<Stmt-CF>>
<<LAYOUT?-CF>>
";"
<<LAYOUT?-CF>>
<<{Stmt ";"}+-CF>>