国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看

合肥生活安徽新聞合肥交通合肥房產生活服務合肥教育合肥招聘合肥旅游文化藝術合肥美食合肥地圖合肥社保合肥醫院企業服務合肥法律

代做CSE340、代寫Parsing編程語言
代做CSE340、代寫Parsing編程語言

時間:2024-04-19  來源:合肥網hfw.cc  作者:hfw.cc 我要糾錯



Project 2: Parsing
The goal of this project is to give you experience in writing a top-down recursive descent parser and to get
introduced to the basics of symbol tables for nested scopes.
We begin by introducing the grammar of our language. Then we will discuss the semantics of our
language that involves lexical scoping rules and name resolution. Finally, we will go over a few examples
and formalize the expected output.
NOTE: This project is significantly more involved than the first project. You should start on it immediately.
1. Lexical Specification
Here is the list of tokens that your lexical analyzer needs to support:
Comments and Space
In addition to these tokens, our input programs might have comments thatshould be ignored by the
lexical analyzer.Acommentstartswith // andcontinues until a newline characteris encountered. The
regular expressions for comments is: // (any)* \n in which any is defined to be any character except
\n . Also, like in the first project, your lexical analyzer should skip space between tokens.
PUBLIC = “public”
PRIVATE = “private”
EQUAL = “=”
COLON = “:”
COMMA = “,”
SEMICOLON = “;”
LBRACE = “{”
RBRACE = “}”
ID = letter (letter + digit)*
2. Grammar
Here is the grammar for our input language:
Here is an example input program with comments:
Note that our grammar does not recognize comments, so our parser would not know anything about
comments, but our lexical analyzer would deal with comments. This is similar to handling of spaces by
the lexer, the lexer skips the spaces. In a similar fashion, your lexer should skip
program ® global_vars scope
global_vars ® e
global_vars ® var_list SEMICOLON
var_list ® ID
var_list ® ID COMMA var_list
scope ® ID LBRACE public_vars private_vars stmt_list RBRACE
public_vars ® e
public_vars ® PUBLIC COLON var_list SEMICOLON
private_vars ® e
private_vars ® PRIVATE COLON var_list SEMICOLON
stmt_list ® stmt
stmt_list ® stmt stmt_list
stmt ® ID EQUAL ID SEMICOLON
stmt ® scope
a, b, c; // These are global variables
test {
public:
a, b, hello; // These are public variables of scope test
private:
x, y; // These are private variables of scope test
a = b; // the body of test starts with this line
hello = c;
y = r;
nested { // this is a nested scope
public:
b; // which does not have private variables
a = b;
x = hello;
c = y;
// we can also have lines that only contain comments like this
}
}
comments.
We highlight some of the syntactical elements of the language:
Global variables are optional
The scopes have optional public and private variables
Every scope has a body which is a list of statements
A statement can be either a simple assignment or another scope (a nested scope)
3. Scoping and Resolving References
Here are the scoping rules for our language:
The public variables of a scope are accessible to its nested scopes
The private variables of a scope are not accessible to its nested scopes
Lexical scoping rules are used to resolve name references
Global variables are accessible to all scopes
Every reference to a variable is resolved to a specific declaration by specifying the variable's
defining scope. We will use the following notation to specify declarations:
• If variable a is declared in the global variables list, we use ::a to refer to it
• If variable a is declared in scope b, we use b.a to refer to it
 And if reference to name a cannot be resolved, we denote that by ?.a
Here is the example program from the previous section, with all name references resolved (look at the
comments):

4. Examples
The simplest possible program would be:
Let's add a global variable:
a, b, c;
test {
public:
a, b, hello;
private:
x, y;
a = b; // test.a = test.b
hello = c; // test.hello = ::c
y = r; // test.y = ?.r
nested {
public:
b;
a = b; // test.a = nested.b
x = hello; // ?.x = test.hello
c = y; // ::c = ?.y
}
}
main {
a = a; // ?.a = ?.a
}
a;
main {
a = a; // ::a = ::a
}
Now, let's add a public variable a:
Or a private a:
Now, let's see a simple example with nested scopes:
If we add a private variable in main:
a;
main {
public:
a;
a = a; // main.a = main.a
}
a;
main {
private:
a;
a = a; // main.a = main.a
}
a, b;
main {
nested {
a = b; // ::a = ::b
}
}
a, b;
main {
private:
a;
nested {
a = b; // ::a = ::b
}
}
And a public b:
You can find more examples by looking at the test cases and their expected outputs.
5. Expected Output
There are two cases:
In case the input does not follow the grammar, the expected output is:
NOTE: no extra information is needed here! Also, notice that we need the exact
message and it's case-sensitive.
In case the input follows the grammar:
For every assignment statement in the input program in order of their appearance in the
program, output the following information:
• The resolved left-hand-side of the assignment
• The resolved right-hand-side of the assignment
in the following format:
NOTE: You can assume that scopes have unique names and variable names in a single
scope (public and private) are not repeated.
a, b;
main {
public:
b;
private:
a;
nested {
a = b; // ::a = main.b
}
}
Syntax Error
resolved_lhs = resolved_rhs
For example, given the following input program:
The expected output is:
6. Implementation
Start by modifying the lexical analyzer from previous project to make it recognize the tokens
required for parsing this grammar. It should also be able to handle comments (skip them like
spaces).
NOTE: make sure you remove the tokens that are not used in this grammar from your
lexer, otherwise you might not be able to pass all test cases. Your TokenType type declaration
should look like this:
a, b, c;
test {
public:
a, b, hello;
private:
x, y;
a = b;
hello = c;
y = r;
nested {
public:
b;
a = b;
x = hello;
c = y;
}
}
test.a = test.b
test.hello = ::c
test.y = ?.r
test.a = nested.b
?.x = test.hello
::c = ?.y
typedef enum { END_OF_FILE = 0,
PUBLIC, PRIVATE,
EQUAL, COLON, COMMA, SEMICOLON,
LBRACE, RBRACE, ID, ERROR
} TokenType
Next, write a parser for the given grammar. You would need one function per each non-terminal
of the grammar to handle parsing of that non-terminal. I suggest you use the following signature
for these functions:
Where X would be replaced by the target non-terminal. The lexical analyzer object needs to be
accessible to these functions so that they can use the lexer to get and unget tokens. These functions
can be member functions of a class, and the lexer object can be a member variable of that class.
You also need a syntax_error function that prints the proper message and terminates
the program:
Test your parser thoroughly. Make sure it can detect any syntactical errors.
Next, write a symbol table that stores information about scopes and variables. You would also
need to store assignments in a list to be accessed after parsing is finished. You need to think
about how to organize all this information in a way that is useful for producing the required
output.
Write a function that resolves the left-hand- side and right-hand-side of all assignments and
produces the required output. Call this function in your main() function after successfully
parsing the input.
NOTE: you might need more time to finish the last step compared to previous steps.
7. Requirements
Here are the requirements of this project:
You should submit all your project files (source code [.cc] and headers[.h]) on
Gradescope. Do not zip them.
You should use C/C++, no other programming languages are allowed.
• Besides the provided test cases, you need to design test cases on your own to rigorously test your
implementation.
You should test your code on Ubuntu Linux 19.04 or greater with gcc 7.5.0 or higher.
void parse_X()
void syntax_error()
{
cout << “Syntax Error\n”;
exit(1);
}
You cannot use library methods for parsing or regular expression (regex) matching in
projects. You will be implementing them yourself. If you have doubts about using a library
method, please check it with the instructor or TA beforehand.
You can write helper methods or have extra files, but they should have been written by you.
8. Evaluation
The submissions are evaluated based on the automated test cases on the Gradescope. Gradescope test cases
are hidden to students. Your grade will be proportional to the number of test cases passing. You have to
thoroughly test your program to ensure it pass all the possible test cases. It is not guaranteed that your code
will pass the Gradescope test cases if it passes the published test cases. As a result, in addition to the
provided test cases, you must design your own test cases to rigorously evaluate your implementation. If
your code does not compile on the submission website, you will not receive any points. On Gradescope,
when you get the results back, ignore the “Test err” case, it is not counted toward the grade.
The parsing test cases contain cases that are syntactically correct and cases that have syntax errors. If a
syntax test case has no syntax error, your program passes the test case if the output is not Syntax Error .
If a syntax test case has syntax error, your program passes the test case if the output is Syntax Error .
Note that if your program prints the syntax error message independently of the input, for example:
It will pass some of the test cases, but you will not receive any points.
You can access the Gradescope through the left side bar in canvas. You have already been enrolled in the
grade scope class, and using the left side bar in canvas you will automatically get into the Gradescope course.
int main()
{
cout << “Syntax Error\n”;
return 0;
}

請加QQ:99515681  郵箱:99515681@qq.com   WX:codinghelp

















 

掃一掃在手機打開當前頁
  • 上一篇:菲律賓入境電子簽證流程有哪些 電子簽辦理指南
  • 下一篇:代做COMP532、代寫a video game from OpenAI Gym
  • 無相關信息
    合肥生活資訊

    合肥圖文信息
    流體仿真外包多少錢_專業CFD分析代做_友商科技CAE仿真
    流體仿真外包多少錢_專業CFD分析代做_友商科
    CAE仿真分析代做公司 CFD流體仿真服務 管路流場仿真外包
    CAE仿真分析代做公司 CFD流體仿真服務 管路
    流體CFD仿真分析_代做咨詢服務_Fluent 仿真技術服務
    流體CFD仿真分析_代做咨詢服務_Fluent 仿真
    結構仿真分析服務_CAE代做咨詢外包_剛強度疲勞振動
    結構仿真分析服務_CAE代做咨詢外包_剛強度疲
    流體cfd仿真分析服務 7類仿真分析代做服務40個行業
    流體cfd仿真分析服務 7類仿真分析代做服務4
    超全面的拼多多電商運營技巧,多多開團助手,多多出評軟件徽y1698861
    超全面的拼多多電商運營技巧,多多開團助手
    CAE有限元仿真分析團隊,2026仿真代做咨詢服務平臺
    CAE有限元仿真分析團隊,2026仿真代做咨詢服
    釘釘簽到打卡位置修改神器,2026怎么修改定位在范圍內
    釘釘簽到打卡位置修改神器,2026怎么修改定
  • 短信驗證碼 豆包網頁版入口 破天一劍 目錄網 排行網

    關于我們 | 打賞支持 | 廣告服務 | 聯系我們 | 網站地圖 | 免責聲明 | 幫助中心 | 友情鏈接 |

    Copyright © 2025 hfw.cc Inc. All Rights Reserved. 合肥網 版權所有
    ICP備06013414號-3 公安備 42010502001045

    国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看
    久久亚洲私人国产精品va| 国产精品激情av电影在线观看| 亚洲乱码国产一区三区| 亚洲中文字幕无码不卡电影 | 国产精品第一第二| 亚洲精品偷拍视频| 国产精品视频网站| 国产激情在线观看视频| 国产卡一卡二在线| 蜜桃视频在线观看91| 人妻无码久久一区二区三区免费| 亚洲日本欧美在线| 欧美日本高清一区| 久久久精品视频成人| 97久久天天综合色天天综合色hd| 精品少妇在线视频| 精品无码一区二区三区爱欲| 欧美极品jizzhd欧美| 日韩欧美一区二区三区久久婷婷| 亚洲综合中文字幕在线观看| 久久国产精品影视| 精品国产综合区久久久久久| 久久手机免费视频| 国产精品青青草| 国产精品美女诱惑| 欧美成人精品三级在线观看| 国产精品久久久久7777婷婷| 国产精品美女久久久久久免费| 久久久97精品| 久久精品视频在线观看| 久久精品国产免费观看| 国产精品网址在线| 欧美成人一二三| 欧美极品美女电影一区| 中文字幕一区二区三区精彩视频| 欧美激情va永久在线播放| 久久国产精品久久久久久久久久 | 久久大片网站| 日本精品在线视频| 久久精品视频在线观看| 欧美乱妇高清无乱码| 福利视频一区二区三区四区| 黄色成人在线看| www.九色.com| 欧美一区二区三区在线免费观看 | 91蜜桃网站免费观看| 91精品国产综合久久香蕉922 | 99国产在线| 久久久久久久久久久久久久久久久久av | 欧美精品在线观看91| 中文网丁香综合网| 欧美大肥婆大肥bbbbb| 国产精品青青在线观看爽香蕉| 国产精自产拍久久久久久| 欧美中在线观看| 亚洲欧美久久234| 99精品国产一区二区| 色综合91久久精品中文字幕| 国产精品亚洲一区| 欧美这里只有精品| 欧美xxxx做受欧美.88| 蜜桃视频日韩| 国产日韩成人内射视频| 久久精品中文字幕一区| av色综合网| 欧美视频在线观看视频| 久久激情视频免费观看| 含羞草久久爱69一区| av一区二区三区在线观看| 日韩有码在线视频| 精品国产依人香蕉在线精品| 免费av在线一区| 热久久美女精品天天吊色| 亚洲国产精品久久久久婷蜜芽| 日韩亚洲第一页| 风间由美一区二区三区| 免费看国产精品一二区视频| 日本欧美国产在线| 最新欧美日韩亚洲| 欧美成人精品一区二区三区| 好吊色欧美一区二区三区四区| 精品少妇人欧美激情在线观看| 日韩中文娱乐网| 国产xxxxx视频| 精品国产乱码久久久久久丨区2区| 欧美一级电影久久| 国产精自产拍久久久久久| 国产在线98福利播放视频| 国产精品日韩精品| 中文字幕欧美日韩一区二区| 国产精品中文久久久久久久| 国产精品视频区| 国产精品美女av| 国产精品青草久久久久福利99| 亚洲国产欧美一区二区三区不卡 | 久久精品中文字幕一区| 欧日韩一区二区三区| 久久久久久久一区二区| 欧美日韩日本网| 国产精品黄页免费高清在线观看 | 久久久久亚洲av无码专区喷水| 日本视频一区二区在线观看| 久久久久久久91| 欧美 日韩 国产 在线观看| 久久精品美女视频网站| 欧美成人综合一区| 久久成人这里只有精品| 国产三级精品在线不卡| 久久资源免费视频| 亚洲爆乳无码专区| 国产精品日韩一区二区三区| 国产成人a亚洲精v品无码| 日韩中文字幕在线免费观看| 国产黄视频在线| 成人欧美一区二区| www日韩中文字幕在线看| 日本va中文字幕| 久久影视中文粉嫩av| 亚洲国产一区二区三区在线播| 欧美一区国产一区| 99亚洲精品视频| 青青青免费在线| 久久这里有精品视频| 欧美成人一区在线| 8050国产精品久久久久久| 欧洲成人一区二区| 宅男噜噜99国产精品观看免费| 国产aⅴ精品一区二区三区黄| 久久99精品久久久久久久久久| 亚洲中文字幕无码一区二区三区| 成人在线免费观看一区| 午夜精品久久久久久99热软件| 91精品国产综合久久久久久丝袜| 欧美一区二区三区在线播放| 91麻豆国产精品| 国产成人综合亚洲| 国产精品亚洲αv天堂无码| 国产精品99一区| 日韩免费在线看| 色综合久综合久久综合久鬼88 | 久章草在线视频| 欧美亚洲日本黄色| 国产精品国模大尺度私拍| 99视频在线| 免费久久久久久| 色爱区成人综合网| 国产精品嫩草影院久久久| 99中文视频在线| 国内精品二区| 日韩美女中文字幕| 亚洲第一综合| 精品中文字幕在线2019| 久久精品亚洲精品| 久久久久人妻精品一区三寸 | 99国内精品久久久久久久软件| 黄色三级中文字幕| 日本免费成人网| 亚洲一区二区三区免费观看| 国产精品九九九| 国产成人看片| 99精品国产高清在线观看| 国产一区二区视频在线观看 | 欧美精品第三页| 日本黄网免费一区二区精品| 亚洲一区二区三区精品视频| 欧美精品在线免费| 国产精品男人的天堂| 日韩中文字幕视频在线| 久久国产日韩欧美| 久久人人爽人人爽人人片av高清| 国产欧美一区二区三区久久人妖| 欧洲日本亚洲国产区| 日韩人妻无码精品久久久不卡| 五月天在线免费视频| 在线精品日韩| 欧美精品久久久久| 中文字幕第一页亚洲| 国产99在线播放| 在线视频不卡一区二区三区| 久久99亚洲热视| 欧美激情精品久久久久久黑人| 另类天堂视频在线观看| 久久亚洲春色中文字幕| 欧美xxxx做受欧美| 九色精品免费永久在线| 精品福利影视| 美女久久久久久久| 欧美激情aaaa| 亚洲国产精品视频一区| 亚洲人精品午夜射精日韩| 午夜精品免费视频| 日本视频精品一区| 青青a在线精品免费观看| 欧美日韩精品免费观看视一区二区| 欧美亚洲一级片| 国产中文字幕日韩| 高清不卡日本v二区在线| 91久久久久久久久久久久久| 久久久人人爽| 日韩在线播放av|