Skip to content

alsaghir/cppParser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

c++ Parser

Recursive descent parser using c++

The language context free rules are

Program --> Statement_list Statement_list --> Statement_list Statement | Statement Statement --> Var_statement | If_statement Var_statement --> (int|void)ID | (int|void)ID[num]; If_statement --> if (Expression) Statement_list | if (Expression) Statement_list else Statement_list Expression --> Var=Expression Var --> ID|ID[num] Expression --> add-expression Relop add-expression | add-expression Relop --> >=,<=,<>,>,<,== add-expression --> add-expression addop term | term addop --> +|- term --> term mulop factor | factor mulop --> *|/ factor --> num 

ID, num are terminal classes. The rest (int, void, else, <=, =..etc) of terminals are lexemes.

To be able to work using recursive descent, modified rules presented

Program --> Statement_list Statement_list --> Statement Statement_list_dash Statement_list_dash --> Statement Statement_list_dash | ε Statement --> Var_statement | If_statement Var_statement --> ( IV ) Var IV --> int | void Var --> id | id[num]; If_statement --> if (Expression) Statement_list else Statement_list | if (Expression) Statement_list Expression --> Var=Expression | add-expression Relop add-expression | add-expression Relop --> >= | <= | <> | > | < | == add-expression --> term add-expression_dash add-expression_dash --> addop term add-expression_dash | ε addop --> +|- term --> factor term_dash term_dash --> mulop factor term_dash | ε mulop --> *|/ factor --> num 

Input are tokens in specific format

Take a look to Sample.hamada for example and here are some examples. These examples should be valid according to the language and produce success on parsing.

Example 1:

<kw, if> <oc, (> <num, 4> <eq, ==> <num, 3> <cc, )> <oc, (> <kw, int> <cc, )> <id, aa> <os, [> <num, 66> <cs, ]> <kw, else> <oc, (> <kw, void> <cc, )> <id, bb> 

Example 2:

<oc, (> <kw, int> <cc, )> <id, bb> <os, [> <num, 66> <cs, ]> <semi, ;> 

More output

light-output.cpp & extensiveOutput.cpp are completely commented but saved for sake of testing ONLY. They have to much outputs on each function calling and more.

About

Recursive descent parser using c++

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages