联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> Java编程Java编程

日期:2020-04-13 09:40

Assignment 3 - Syntax Based Semantics

Total Points = 50

Instructions:

1. You must use SWI Prolog to implement this problem.

2. You must submit this assignment on Canvas by clicking the title link for the

assignment. Make sure your programs compile (without any compiler errors).

You will not receive credit if your program for a problem does not compile. If you

are unable to complete any of the programs, submit the parts that work (with no

compiler errors) for partial credit.

3. Your grade will be based on meeting the requirements, functionality (does the

program do what it is supposed to do), readability (is the code nicely indented and

formatted), and understandability (are the literals meaningful and is the code well

documented with appropriate comments). You must incorporate all the good

programming practices and styles.

Deliverables:

1. You should submit one .pl file named assignSemantics.pl. This file should

contain your code for the problem in the assignment for the grader to run.

This file will only contain the code and not the sample runs.

2. You should also submit one PDF file named assignSemantics.pdf. This PDF file

should contain code to the solution of the problems (in text format only, no

snapshot will be accepted) and your program's sample runs with output (in text

format only, no snapshot will be accepted). Make sure to paste your code

correctly (with correct indentation). If you have any text for the grader to read

before grading, you can include it at the top of this file as comments or in canvas

notes.

Q1. Program the semantics of the language whose definition is given below (the language

is like the language given for parsing using DCG, except for two productions added for

Expressions).

P in Program

K in Block

D in Declaration

C in Command

E in Arithmetic Expression

B in Boolean Expression

I in Identifier

N in Number

P ::= K.

K ::= begin D; C end

D ::= D ; D | const I = N | var I

C ::= C ; C | I := E | if B then C else C endif| while B do C endwhile | K

B ::= true | false | E = E | not B

E ::= E + E | E - E | E * E | E / E | (E) | I:= E | I | N

I ::= x | y | z | u | v

N ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Assume that all programs written in this language take 2 inputs that are found in variables

x and y before the program begins execution and produce one output found in variable z

after the program execution is over. Notice that both arithmetic and boolean expressions

have side-effects due to the rule E ::= I := E.

To evaluate a program in this language, write a predicate program_eval(P, X, Y, Z),

where P is the parse tree of the program, X & Y are the inputs and Z is the output after

the evaluation. Use program/3 (from DCG parsing) to create your parse tree and

program_eval/4 to run it.

For example, your program should accept the following query:

?- program(P, [begin, var, z, ; , var, x, ;, z, :=, x, end, .], []), write(P),

program_eval(P, 2, 3, Z).

and return Z = 2.

Test your program with the following 8 cases. You may use the initial values for x and y

to be x=2, y=3, thus to output z.

1. begin var z; var x; z:=x end.

2. begin var x; var y; var z; z:=x+y end.

3. begin var x; var y; var z; z:=(z:=x+2)+y end.

4. begin var x; var y; var z; if x=y then z:=1 else z:=0 endif end.

5. begin var x; var y; var z; if x = 0 then z:=x else z:=y endif end.

6. begin var x; var y; var z; if not x=y then z:=x else z:=y endif end.

7. begin var x; var z; z:=0; while not x=0 do z := z+1; x:=x-1 endwhile end.

8. begin var x; var y; var z; z:=1; u:=x; while not u = 0 do z :=z*y; u:=u-1

endwhile end.


版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp