Difference between revisions of "PLC Laboratory 8"

From Marek Běhálek Wiki
Jump to navigation Jump to search
Line 5: Line 5:
 
The basic description is still valid. Expressions contain +, -, *, / operators (with common priorities and left associativity) and parentheses. To simplify the task, consider we have only binary operators. There are no unary operators in our language.  
 
The basic description is still valid. Expressions contain +, -, *, / operators (with common priorities and left associativity) and parentheses. To simplify the task, consider we have only binary operators. There are no unary operators in our language.  
  
But now, we have variables. Their identifiers compose from letters and they have two types: <code>float</code> and <code>int</code>. Before variables are used, they need to be defined. The language is extended with <code>=</code> operator (lowest priority and right associativity).  
+
But now, we have variables. Their identifiers compose from letters and they have two types: <code>float</code> and <code>int</code>. Before variables are used, they need to be declared (use the same syntax as in C). The language is extended with <code>=</code> operator (lowest priority and right associativity).  
  
Moreover, our expression now has a type. If it contains only integer numbers and variables it is <code>int</code>. In all other cases it is <code>float</code>.
+
Moreover, now, our expressions have a type. If it contains only integer numbers and variables its type is <code>int</code>. In all other cases it is <code>float</code>. In other words, if there is a floating point number in our expression, all other integer values will be converted to float and the resulting type is <code>float</code>.
  
 
== Input specification ==
 
== Input specification ==
  
In the input, there are expressions, they are writtent with free formatting. Each expression ends with semicolon. Numbers can be written similarly to C language constants. it can be either: decimal , octal (starting with zero) or hexadecimal (starting with characters 0x) number.
+
In the input, there are expressions and variable declarations, they are written in free formatting. Each expression and declaration ends with semicolon. Numbers can be written similarly to C language constants. it can be either: integer number or a floating point number. Variable declaration starts with the type and follows with a list of declared variables separated by <code>','</code>.
  
 
== Output specification ==
 
== Output specification ==
  
For each expression write one line containing the result – the computed value of the expression. If there is any error in the input, you can stop the computation.
+
For each expression write one line containing the result – the computed value of the expression. If there is any syntactic error in the input, you can stop the computation. If the expression contains some other (type) error, write the error instead of the resulting value.
  
 
== Example ==  
 
== Example ==  
 
* Input
 
* Input
 
<syntaxhighlight lang="haskell" >
 
<syntaxhighlight lang="haskell" >
012-10; 2 * (0xff+5);
+
int a,b;
0x23e5-0x201;
+
a = b = 15;
 +
a + b;
 +
float c;
 +
c = a + b;
 +
c + a;
 +
a = c
 
</syntaxhighlight >
 
</syntaxhighlight >
  
 
* Output
 
* Output
 +
''Your output may be different. Type error's messages are not precisely defined and there is no defined precision for floating point numbers.''
 
<syntaxhighlight lang="haskell" >
 
<syntaxhighlight lang="haskell" >
0
+
15
520
+
30
8676
+
30.0
 +
45.0
 +
ERROR: 'a' type is int, but the assigned value is float.
 
</syntaxhighlight >
 
</syntaxhighlight >

Revision as of 10:11, 27 January 2022

Interpreter of Arithmetic Expressions Using ANTLR II

Extend the interpreter of arithmetic expressions from previous Laboratory 7 with the usage of variables.

The basic description is still valid. Expressions contain +, -, *, / operators (with common priorities and left associativity) and parentheses. To simplify the task, consider we have only binary operators. There are no unary operators in our language.

But now, we have variables. Their identifiers compose from letters and they have two types: float and int. Before variables are used, they need to be declared (use the same syntax as in C). The language is extended with = operator (lowest priority and right associativity).

Moreover, now, our expressions have a type. If it contains only integer numbers and variables its type is int. In all other cases it is float. In other words, if there is a floating point number in our expression, all other integer values will be converted to float and the resulting type is float.

Input specification

In the input, there are expressions and variable declarations, they are written in free formatting. Each expression and declaration ends with semicolon. Numbers can be written similarly to C language constants. it can be either: integer number or a floating point number. Variable declaration starts with the type and follows with a list of declared variables separated by ','.

Output specification

For each expression write one line containing the result – the computed value of the expression. If there is any syntactic error in the input, you can stop the computation. If the expression contains some other (type) error, write the error instead of the resulting value.

Example

  • Input
int a,b;
a = b = 15;
a + b;
float c;
c = a + b;
c + a;
a = c
  • Output

Your output may be different. Type error's messages are not precisely defined and there is no defined precision for floating point numbers.

15
30
30.0
45.0
ERROR: 'a' type is int, but the assigned value is float.