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

合肥生活安徽新聞合肥交通合肥房產(chǎn)生活服務(wù)合肥教育合肥招聘合肥旅游文化藝術(shù)合肥美食合肥地圖合肥社保合肥醫(yī)院企業(yè)服務(wù)合肥法律

代做CSE340、代寫Parsing編程語(yǔ)言
代做CSE340、代寫Parsing編程語(yǔ)言

時(shí)間:2024-04-19  來(lái)源:合肥網(wǎng)hfw.cc  作者:hfw.cc 我要糾錯(cuò)



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

請(qǐng)加QQ:99515681  郵箱:99515681@qq.com   WX:codinghelp

















 

掃一掃在手機(jī)打開(kāi)當(dāng)前頁(yè)
  • 上一篇:菲律賓入境電子簽證流程有哪些 電子簽辦理指南
  • 下一篇:代做COMP532、代寫a video game from OpenAI Gym
  • 無(wú)相關(guān)信息
    合肥生活資訊

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

    關(guān)于我們 | 打賞支持 | 廣告服務(wù) | 聯(lián)系我們 | 網(wǎng)站地圖 | 免責(zé)聲明 | 幫助中心 | 友情鏈接 |

    Copyright © 2025 hfw.cc Inc. All Rights Reserved. 合肥網(wǎng) 版權(quán)所有
    ICP備06013414號(hào)-3 公安備 42010502001045

    国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看
    99精品国产高清在线观看| 欧美精品欧美精品| 亚洲欧洲日韩综合二区| 亚洲成人网上| 久久国产精品影片| 成人av免费在线看| 污污污污污污www网站免费| 国产精品一区二区三区免费| 欧美精品日韩www.p站| 久久美女福利视频| 国产在线观看欧美| 欧美一区视久久| 免费不卡欧美自拍视频| 国产成人精品视频ⅴa片软件竹菊| 国产视频一区二区三区在线播放| 色av吧综合网| 国产精品夜夜夜爽张柏芝| 亚洲乱码一区二区三区三上悠亚 | 伊人色综合久久天天五月婷| 国产成人精品免高潮在线观看| 欧美 国产 精品| 国产欧美日韩中文字幕在线| 福利视频一区二区三区四区| 国产在线观看91精品一区| 欧美亚洲视频一区| 无码人妻精品一区二区蜜桃百度 | 国产精品久久久久一区二区| 国产又黄又大又粗视频| 亚洲一区久久久| 国产精品久在线观看| 国产a级片免费观看| 97精品视频在线观看| 国严精品久久久久久亚洲影视| 欧美久久在线观看| 日本一区二区视频| 日本一区网站| 欧美一区二视频在线免费观看| 偷拍盗摄高潮叫床对白清晰| 午夜精品亚洲一区二区三区嫩草 | 91精品中文在线| 久久久无码中文字幕久...| 久久久精品2019中文字幕神马 | 久久av中文字幕| 亚洲aⅴ日韩av电影在线观看| 天天综合色天天综合色hd| 秋霞在线观看一区二区三区| 日韩毛片在线免费看| 国产一区二区三区高清| 欧美激情视频网站| 欧美一区1区三区3区公司| 日产日韩在线亚洲欧美| 欧美日韩xxxxx| 色偷偷888欧美精品久久久| 国产另类自拍| 国产日韩在线一区二区三区| 精品一区二区中文字幕| 国产日韩换脸av一区在线观看| 青青视频在线播放| 人妻夜夜添夜夜无码av| 日本精品久久久久久久久久| 亚洲最大福利视频网站| 国产精品久久久久久久天堂 | 人妻夜夜添夜夜无码av| 免费一级特黄毛片| 国内精品二区| 精品视频高清无人区区二区三区| 国产欧美一区二区三区不卡高清| 黄色国产小视频| 国产女同一区二区| 成年人网站国产| 色妞欧美日韩在线| 精品国产一区av| 欧美另类99xxxxx| 日韩在线国产| av一区二区三区在线观看| 波霸ol色综合久久| 不卡av在线网站| 日韩国产在线一区| www亚洲国产| 国产精品96久久久久久| 久久九九热免费视频| 中文字幕日韩精品无码内射| 日韩精品不卡| av网址在线观看免费| 国产精品视频免费在线| 伊人久久大香线蕉午夜av| 国语自产精品视频在线看一大j8| 亚洲黄色成人久久久| 日日噜噜夜夜狠狠久久丁香五月| 国产深夜精品福利| 久久视频在线观看中文字幕| 国产精品久久久久免费| 日本www在线视频| 黄色一级大片在线观看| 国产日韩欧美大片| 久久久久久网站| 午夜免费久久久久| 日本精品一区二区三区高清 久久| 色中色综合成人| 国内精品二区| 国产精品免费一区二区三区观看| 日韩精品久久一区| 国产区二精品视| 亚洲一区二区久久久久久| 欧美精品亚洲精品| 国产传媒一区二区| 一本久道高清无码视频| 日av中文字幕| 久久这里只有精品8| 精品久久久久亚洲| 国产视频观看一区| 欧美精品999| 欧美综合在线观看视频| 久久久精品日本| 欧美国产日韩激情| 国产精品欧美日韩| 国产美女精彩久久| 一区二区日本伦理| 成人动漫在线观看视频| 美女精品视频一区| 国产无套内射久久久国产| 中文字幕制服丝袜在线| 91精品国产高清久久久久久91| 久久综合电影一区| 免费看国产精品一二区视频| 欧美成人在线免费| 国产成人一二三区| 亚洲一区二区三区免费看| 国产精品尤物福利片在线观看| 欧美日韩国产第一页| 69av在线播放| 黄色www在线观看| 欧美激情亚洲激情| 久久狠狠久久综合桃花| 国产精品一区久久久| 无码中文字幕色专区| 日韩视频免费在线播放| 99视频在线| 日韩色妇久久av| 国产精品美女久久久久av福利| 国产三区在线视频| 亚洲va韩国va欧美va精四季| 欧美日韩国产va另类| 久久精品香蕉视频| 人偷久久久久久久偷女厕| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 欧美综合在线观看| 国产精品久久二区| 91久久精品www人人做人人爽| 色99中文字幕| 国产精品美腿一区在线看| av资源一区二区| 精品999在线观看| 日本精品在线视频| 精品国产一区二区三区久久久久久 | 人人妻人人澡人人爽精品欧美一区 | 国产日韩中文在线| 日本一区不卡| 久久久久国产精品免费| 国产成人免费观看| 久久免费高清视频| 国产suv精品一区二区三区88区| 黄色一级片黄色| 久久亚洲精品网站| 久久久噜久噜久久综合| 91精品视频播放| 丝袜美腿亚洲一区二区| 国产私拍一区| 精品91免费| 亚洲精品日韩精品| 欧美激情中文网| 久久久久久成人精品| 中文字幕乱码一区二区三区| 久久视频国产精品免费视频在线| 久久九九免费视频| 国产高清www| 国产精品久久二区| 国产精品美女呻吟| 欧美在线播放一区二区| 欧美激情视频在线| 不卡毛片在线看| 国产人妻777人伦精品hd| 一区二区免费电影| 亚洲一区二区三区在线免费观看| 性色av一区二区咪爱| 精品一区二区三区无码视频| 久久久亚洲国产| 久久99中文字幕| 久久久久久国产精品| 91精品久久久久久久| 欧美视频免费播放| 中文字幕一区二区三区四区五区 | 青青草精品视频在线| 欧美精品久久久久a| 日韩av不卡电影| 国产在线精品自拍| 亚洲午夜久久久影院伊人| 99在线观看视频| 国产在线精品一区免费香蕉| 国产日韩亚洲欧美|