Difference between revisions of "PLC Laboratory 2"
Jump to navigation
Jump to search
(Created blank page) |
|||
| (8 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
| + | == Lexical analyzer == | ||
| + | Write a program, that reads an input and converts it into a sequence of lexical symbols – ''tokens''. Each token is a pair, it composes from a type and possibly a value. | ||
| + | |||
| + | The tokens definition depends on you, and it is considered a part of the solution. | ||
| + | |||
| + | == Input specification == | ||
| + | |||
| + | The input may be containing the following symbols: | ||
| + | * ''identifiers'' - consisting of a sequence of letters and numbers starting with a letter | ||
| + | * ''numbers'' - formed by a sequence of decimal digits | ||
| + | * ''operators'' - symbols <code>'+', '-', '*' and '/'</code>, | ||
| + | * ''delimiters'' - symbols <code>'(', ')' and ';'</code>, | ||
| + | * ''keywords'' - <code>div</code> and <code>mod</code>. | ||
| + | |||
| + | Symbols can be separated by a sequence of spaces, tabs, and line breaks. | ||
| + | |||
| + | There can be notes in the input. Notes are preceded by a sequence <code>//</code> and continue to the end of the line. | ||
| + | |||
| + | ''White spaces and notes does not produce any lexical symbols.'' | ||
| + | |||
| + | == Output specification == | ||
| + | |||
| + | Converts the given input into a sequence of tokens and write them on output. Write each token on a separated line. | ||
| + | |||
| + | == Example == | ||
| + | * Input | ||
| + | <syntaxhighlight lang="haskell" > | ||
| + | -2 + (245 div 3); // note | ||
| + | 2 mod 3 * hello | ||
| + | </syntaxhighlight > | ||
| + | |||
| + | * Output | ||
| + | ''Your output can be different, it depends on your definition of tokens.'' | ||
| + | <syntaxhighlight lang="haskell" > | ||
| + | OP:- | ||
| + | NUM:2 | ||
| + | OP:+ | ||
| + | LPAR | ||
| + | NUM:245 | ||
| + | DIV | ||
| + | NUM:3 | ||
| + | RPAR | ||
| + | SEMICOLON | ||
| + | NUM:2 | ||
| + | MOD | ||
| + | NUM:3 | ||
| + | OP:* | ||
| + | ID:hello | ||
| + | </syntaxhighlight > | ||
Latest revision as of 10:27, 14 February 2022
Lexical analyzer
Write a program, that reads an input and converts it into a sequence of lexical symbols – tokens. Each token is a pair, it composes from a type and possibly a value.
The tokens definition depends on you, and it is considered a part of the solution.
Input specification
The input may be containing the following symbols:
- identifiers - consisting of a sequence of letters and numbers starting with a letter
- numbers - formed by a sequence of decimal digits
- operators - symbols
'+', '-', '*' and '/', - delimiters - symbols
'(', ')' and ';', - keywords -
divandmod.
Symbols can be separated by a sequence of spaces, tabs, and line breaks.
There can be notes in the input. Notes are preceded by a sequence // and continue to the end of the line.
White spaces and notes does not produce any lexical symbols.
Output specification
Converts the given input into a sequence of tokens and write them on output. Write each token on a separated line.
Example
- Input
-2 + (245 div 3); // note
2 mod 3 * hello
- Output
Your output can be different, it depends on your definition of tokens.
OP:-
NUM:2
OP:+
LPAR
NUM:245
DIV
NUM:3
RPAR
SEMICOLON
NUM:2
MOD
NUM:3
OP:*
ID:hello