1.2. Синтаксис оператора
Очень часто в создаваемые программы требуется внести элемент случайности, например чтобы сценарий действий в программе развивался каждый раз по разному, или пользователю программ выдавались случайные данные, да и много еще для чего полезна данная функция. Поможет нам внести случайность замечательная команда Random, собственно основная её функция это сгенерировать случайное число, а уже потом вы это случайное число можете использовать для прикладных нужд.
Синтаксис команды : ГСЧ "max_num" "[aaa]" или
aaa = ГСЧ (min, max);
Где:
max_num - Это верхняя граница генерируемых чисел (нижняя граница генерируемых чисел у данной команды всегда 0), число max_num должно быть всегда целым,иначе команда не будет работать правильно.
[aaa] и aaa - Это переменная куда заносится результат работы команды
Random max и min – диапазон генерируемого числа.
1.3. Грамматика Бэкуса – Наура исходного языка
<выражение> ::= <ключ_слово> “<число>” “<переменная>”
<выражение> ::= <переменная> = < ключ_слово> (<число>,<число>);
<переменная> ::= {a..z} <число>::={0..9}
<ключ_слово> ::= ГСЧ
2 глава. Практическая часть
2.1. Лексический анализатор
program leksic_analizator;
{$APPTYPE CONSOLE}
uses SysUtils; var S:string; i,k,n:byte;
TL: array [1..100] of string; sost: boolean; begin writeln('Vvedite virajenie'); readln(S); sost:=true; n := length(S); k:=1; for i:=1 to n do begin case S[i] of
'A'..'Z', 'a'..'z': TL[k]:= TL[k] + S[i];
'А'..'Я': TL[k]:= TL[k] + S[i];
'0'..'9': TL[k]:= TL[k] + S[i];
' ': Inc(k); else sost:=false; end; end; if not(sost) then begin writeln('Tablica leksem'); for i:=1 to k do
writeln (TL[i]); end; readln; end.
2.2. Синтаксический анализатор
Листинг:
#include
#include
#include #include
using namespace std;
class STACK{
int top;
int preority;
public:
char el[1000];
bool empty(){if(top<0)return 1; return 0;} STACK();
void push(char a){top++; el[top]=a; if(a=='+'||a=='-')preority=1;else preority=2;}; int get_preority(){return preority;}
char pop(){top--; if(el[top]=='+'||el[top]=='-')preority=1;else preority=2; return el[top+1];}; char on_top(){return el[top];}
};
STACK::STACK(){top=-1; preority=1;}
char elem[1000][10]; int f_elem=0; char elem_got[1000][10]; int f_got=1; char *zn="*/+-";
bool checkZN(char a){for(int i=0; ibool parser(char *a){ for(int i=0; i} f_elem++; i+=f_buf; if(bil)i-=1;
} return 1;}
int preority(char a){if(a=='+'||a=='-')return 1; else return 2;} int main()
{
ofstream out("c:/out.txt");
char a[1000]; STACK stack;
parser(gets(a)); strcpy(elem_got[0], elem[0]); for(int i=1; iif(preority(elem[i][0])>=stack.get_preority()){ stack.push(elem[i][0]);
strcpy(elem_got[f_got], elem[i+1]); f_got++;
}else{
while(preority(elem[i][0])strcpy(elem_got[f_got], elem[i+1]); f_got++;
} }
while(!stack.empty()){elem_got[f_got][0]=stack.pop(); f_got++;}
for(int i=0; ireturn 0; }
Скриншоты:
Исходные значения
Результат
Do'stlaringiz bilan baham: |