99爱在线视频这里只有精品_窝窝午夜看片成人精品_日韩精品久久久毛片一区二区_亚洲一区二区久久

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

代做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
  • 無相關信息
    合肥生活資訊

    合肥圖文信息
    急尋熱仿真分析?代做熱仿真服務+熱設計優化
    急尋熱仿真分析?代做熱仿真服務+熱設計優化
    出評 開團工具
    出評 開團工具
    挖掘機濾芯提升發動機性能
    挖掘機濾芯提升發動機性能
    海信羅馬假日洗衣機亮相AWE  復古美學與現代科技完美結合
    海信羅馬假日洗衣機亮相AWE 復古美學與現代
    合肥機場巴士4號線
    合肥機場巴士4號線
    合肥機場巴士3號線
    合肥機場巴士3號線
    合肥機場巴士2號線
    合肥機場巴士2號線
    合肥機場巴士1號線
    合肥機場巴士1號線
  • 短信驗證碼 豆包 幣安下載 AI生圖 目錄網

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

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

    99爱在线视频这里只有精品_窝窝午夜看片成人精品_日韩精品久久久毛片一区二区_亚洲一区二区久久

          9000px;">

                日产国产高清一区二区三区| 另类小说图片综合网| 蜜芽一区二区三区| 久久久久久久久久久久久夜| 久久精品人人爽人人爽| 欧美色图一区二区三区| 日本不卡1234视频| 国产精品护士白丝一区av| 国产精品无遮挡| 精品欧美一区二区在线观看| 精品久久久网站| 91在线码无精品| 一区二区三区中文字幕在线观看| 亚洲欧美二区三区| 国产成人综合自拍| 亚洲一区二区三区四区不卡| 欧美另类久久久品| 色狠狠综合天天综合综合| 在线电影欧美成精品| 日本一区二区免费在线| 亚洲国产另类av| 亚洲自拍欧美精品| 国产成人av一区二区| 欧美三区在线观看| 一区二区三区蜜桃网| 蜜桃久久久久久久| 成人午夜电影久久影院| 亚洲一区免费观看| 日日欢夜夜爽一区| 狠狠久久亚洲欧美| 精品国精品自拍自在线| 亚洲四区在线观看| 在线播放视频一区| 91成人免费在线视频| 久久久久一区二区三区四区| 久久久久9999亚洲精品| 在线播放欧美女士性生活| 99久久99久久免费精品蜜臀| 国产精品资源网站| 国产成人高清视频| av色综合久久天堂av综合| 成人免费的视频| 99久久久国产精品| 欧亚洲嫩模精品一区三区| 欧美日韩精品免费观看视频| 日本韩国一区二区三区| 中文一区二区在线观看| 成人动漫一区二区三区| 久久综合九色综合97婷婷| 99精品在线免费| 国产中文字幕一区| 中文字幕一区二区三区色视频| 亚洲成人一区二区在线观看| 欧美色网一区二区| 自拍偷拍欧美激情| 国产91高潮流白浆在线麻豆| 中文幕一区二区三区久久蜜桃| 视频在线观看国产精品| 91啪亚洲精品| 亚洲一区二区三区影院| 成人免费va视频| 欧美男女性生活在线直播观看| 亚洲国产欧美在线| 欧洲av在线精品| 日日夜夜精品视频免费| 欧美日韩国产在线观看| 亚洲成人在线观看视频| 日韩欧美精品在线视频| 免费在线观看一区二区三区| 欧美一区二区精美| 极品少妇一区二区三区精品视频| 欧美一级片在线| 中文字幕亚洲一区二区av在线| 成人av资源站| 综合久久给合久久狠狠狠97色| 中文字幕亚洲电影| 91一区一区三区| 亚洲一区二区三区美女| 日韩女优av电影在线观看| 国产一区二区三区精品视频| 欧美国产一区二区| 欧美午夜精品电影| 日韩电影免费在线观看网站| 色噜噜夜夜夜综合网| 美女网站视频久久| 精品成人佐山爱一区二区| 99久久久久免费精品国产| 亚洲欧美福利一区二区| 欧美日韩一区 二区 三区 久久精品| 亚洲一区二区三区四区在线免费观看| 亚洲成人av一区二区三区| 4438亚洲最大| 国产一区二区三区美女| 日韩av不卡在线观看| 欧美日韩国产免费一区二区| 日韩和欧美的一区| 欧美精彩视频一区二区三区| 91精彩视频在线观看| 免费人成在线不卡| 日韩欧美一卡二卡| 国产99久久久国产精品潘金| 亚洲精品一二三区| 欧美激情一区二区三区四区| 91国内精品野花午夜精品| 白白色 亚洲乱淫| 99re在线视频这里只有精品| 色婷婷香蕉在线一区二区| 亚洲欧洲精品一区二区精品久久久| 日韩午夜av一区| 久久综合九色综合欧美亚洲| 国产精品久久久久久久第一福利| 免费成人结看片| 日韩欧美国产高清| 久久久久久久久岛国免费| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 中文字幕一区av| 91精品国产欧美一区二区成人| 国产mv日韩mv欧美| 午夜精品免费在线| 亚洲欧美日韩一区| 欧美不卡一区二区三区四区| 欧美精品电影在线播放| 91在线视频18| 国产精一区二区三区| 91国产精品成人| 欧美一级生活片| 国内精品国产三级国产a久久| 一区二区三区四区中文字幕| 麻豆专区一区二区三区四区五区| 国产精一品亚洲二区在线视频| 91在线视频观看| 国产欧美一区二区三区网站| 美日韩一区二区三区| 色噜噜狠狠一区二区三区果冻| 日韩一区二区三区电影| 国产精品自拍毛片| 天堂在线亚洲视频| 亚洲精品免费一二三区| 精品理论电影在线| 欧美日韩一区二区电影| 国产美女精品在线| 久久久久久久久一| 99re视频这里只有精品| 欧美国产日本韩| 99精品视频一区二区三区| 欧美激情一区二区三区在线| 最新高清无码专区| 91在线观看高清| 美女精品自拍一二三四| 国产亚洲午夜高清国产拍精品| 国产精品综合一区二区| 久久爱另类一区二区小说| 日韩欧美亚洲国产另类| 在线观看免费亚洲| 26uuu国产电影一区二区| aaa国产一区| 蜜桃视频一区二区三区在线观看| 色婷婷综合久久久久中文| 亚洲va欧美va人人爽午夜| 欧美人与禽zozo性伦| www.久久久久久久久| 精品成人一区二区三区四区| 91麻豆精品秘密| 欧美极品美女视频| 国产成人av电影在线| 亚洲国产一区二区视频| 亚洲夂夂婷婷色拍ww47| 亚洲电影一级黄| 奇米影视一区二区三区小说| 日本va欧美va精品发布| 国产福利一区在线观看| youjizz久久| 欧美日韩在线不卡| 久久伊99综合婷婷久久伊| 91在线免费视频观看| 丁香激情综合国产| 亚洲国产成人av好男人在线观看| 欧美国产激情二区三区 | 欧美撒尿777hd撒尿| 国产一区二区三区视频在线播放| 免费观看在线色综合| 国产不卡视频在线播放| 色婷婷综合久久久中文字幕| 麻豆国产一区二区| 亚洲精品免费一二三区| 蜜桃精品在线观看| 91美女在线看| 久久久国产一区二区三区四区小说 | 精品国产一区二区三区不卡 | 亚洲gay无套男同| 国产精品18久久久久久vr| 欧美日本在线播放| 欧美国产乱子伦| 黄页网站大全一区二区| 欧美日韩一区国产| 国产精品久久久久久久久久久免费看| 午夜国产精品一区| 成人午夜大片免费观看| 丝袜美腿亚洲综合| 欧美日韩成人综合|