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;">

                欧美一区二区三区免费在线看| 日韩高清在线观看| 日韩激情在线观看| 91传媒视频在线播放| 欧美激情一二三区| 国产成人精品免费在线| 欧美一区2区视频在线观看| 香蕉久久夜色精品国产使用方法 | 日本在线不卡一区| 欧美三级中文字| 亚洲第一搞黄网站| 5858s免费视频成人| 免费成人在线观看| 久久久精品免费网站| 成人免费av资源| 夜夜精品视频一区二区 | 亚洲在线一区二区三区| 日本道精品一区二区三区| 亚洲韩国一区二区三区| 9191成人精品久久| 国产一区二区久久| 欧美mv日韩mv国产网站app| 日韩av一区二区三区| 欧美一级黄色片| 免费观看成人av| 精品久久国产字幕高潮| 国产一区激情在线| 国产日本一区二区| 国产乱码精品一区二区三区av | 国产成a人亚洲精品| 久久一夜天堂av一区二区三区| 久草中文综合在线| 久久久99免费| 成人免费视频caoporn| 国产精品丝袜黑色高跟| www.亚洲免费av| 亚洲影视在线观看| 欧美精品日韩一本| 国产一区二区在线免费观看| 2023国产一二三区日本精品2022| 国产一区999| 中文一区在线播放| 99re这里都是精品| 亚洲人一二三区| 欧美女孩性生活视频| 九九精品一区二区| 国产精品美日韩| 欧美色图天堂网| 激情六月婷婷久久| 最好看的中文字幕久久| 555www色欧美视频| 国内国产精品久久| 亚洲综合色网站| 欧美成人欧美edvon| 色综合久久66| 日韩国产在线观看| 日韩美女视频19| 日韩欧美一二三四区| av在线不卡免费看| 视频在线在亚洲| 国产精品久久久久国产精品日日 | 欧美一区二区三区视频| 成人av在线资源网站| 麻豆91免费看| 午夜影院在线观看欧美| 国产精品久久久久久妇女6080| 91精品视频网| 欧美三级电影一区| 91免费精品国自产拍在线不卡| 国产一区二区视频在线| 热久久一区二区| 五月婷婷综合网| 一区二区三区中文字幕| 中文字幕一区不卡| 国产日韩欧美不卡在线| 日韩精品一区二区三区四区视频| 欧美三级日韩在线| 色综合久久99| 91老司机福利 在线| 成人精品在线视频观看| 国产高清不卡一区二区| 狠狠色丁香婷综合久久| 精品系列免费在线观看| 久久精品国产色蜜蜜麻豆| 日韩电影一区二区三区| 婷婷久久综合九色综合绿巨人| 亚洲成人中文在线| 亚洲成人一二三| 亚洲大型综合色站| 日韩一区精品视频| 青青草国产成人99久久| 日本欧美一区二区| 麻豆91在线观看| 国产主播一区二区| 成人午夜在线免费| 成人h动漫精品| 色成人在线视频| 欧美人动与zoxxxx乱| 欧美日本一道本| 91精品国产91久久久久久最新毛片| 欧美一级视频精品观看| 欧美白人最猛性xxxxx69交| 久久伊人中文字幕| 国产精品无码永久免费888| 成人免费在线视频| 一区二区在线免费| 日韩二区在线观看| 国产麻豆精品在线| 一本大道久久a久久综合婷婷| 欧美日韩激情在线| 欧美不卡在线视频| 综合在线观看色| 日本在线不卡视频| 国产福利精品一区二区| av电影一区二区| 欧美三级乱人伦电影| 日韩午夜精品视频| 国产精品乱人伦中文| 亚洲国产成人精品视频| 九一九一国产精品| 91国偷自产一区二区开放时间| 69p69国产精品| 国产人成亚洲第一网站在线播放 | 精品视频免费看| 日韩精品中文字幕一区| 欧美国产一区二区| 亚洲成av人片在www色猫咪| 久久99久久99精品免视看婷婷| 国产精品一区三区| 欧美在线999| 国产日产欧美一区二区三区| 夜夜揉揉日日人人青青一国产精品 | 欧美成人video| 亚洲欧美成人一区二区三区| 日本免费新一区视频| 99久久国产综合精品色伊| 欧美一区二区三区视频免费播放| 国产精品国模大尺度视频| 日韩高清电影一区| 91麻豆免费观看| 国产精品国产三级国产aⅴ中文 | 成人av电影观看| 欧美一区午夜视频在线观看| 国产日韩欧美精品电影三级在线| 亚洲第一福利一区| 不卡视频一二三四| 精品国产三级电影在线观看| 一区二区三区欧美久久| 国产麻豆日韩欧美久久| 91精品国产综合久久久久久久久久 | 亚洲日本成人在线观看| 国产在线观看免费一区| 欧美精品在线观看一区二区| 亚洲视频你懂的| 粉嫩嫩av羞羞动漫久久久| 日韩美女一区二区三区| 午夜精品久久久久久久久| 99re这里只有精品6| 久久久久久久久一| 裸体歌舞表演一区二区| 在线播放中文一区| 一区二区三区精品久久久| 成人免费三级在线| 久久嫩草精品久久久久| 免费一级片91| 9191精品国产综合久久久久久| 夜夜嗨av一区二区三区中文字幕| 国产成人精品亚洲日本在线桃色| 日韩亚洲欧美一区二区三区| 午夜精品福利一区二区三区av| 色婷婷综合久色| 亚洲免费伊人电影| 91色|porny| 亚洲天堂2016| 91麻豆免费观看| 亚洲精品综合在线| 99麻豆久久久国产精品免费优播| 国产日韩欧美精品一区| 粉嫩蜜臀av国产精品网站| 国产欧美视频一区二区三区| 国产一区二区精品久久91| 久久伊人中文字幕| 国产精品 欧美精品| 亚洲国产精品成人综合色在线婷婷| 国产精品一二三区| 国产午夜精品久久久久久免费视 | 国产精品中文字幕一区二区三区| 日韩欧美国产一区在线观看| 麻豆免费看一区二区三区| 日韩一级精品视频在线观看| 麻豆视频一区二区| 久久综合九色综合欧美亚洲| 寂寞少妇一区二区三区| 欧美电视剧在线观看完整版| 久久99精品久久久久久动态图| 欧美v日韩v国产v| 国产精品一区二区久久不卡 | 欧美理论在线播放| 日韩av一区二区三区四区| 日韩一区二区三|