Lekser Flashcards

(93 cards)

1
Q

Czym jest pojęcie zamknięcia Kleene’a (Kleene closure) na danym zbiorze?

A

Wyrażane jako R* jest to konkatenacja zbioru R ze sobą, zero lub więcej razy

Zgodnie ze wzorem

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Ile porównań per znak wykonuje flex dla każdego znaku z wejścia?

A

Jedno porównanie.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Czy w strumieniu wejścia, który można opisać regularnymi wyrażeniami warto pisać ręcznie skaner?

A

Nie warto, flex będzie w tym stanowczo lepszy i łątwiejszy w debugowaniu.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Czy regularne wyrażenia używane przez flex są POSIX’owe?

A

Tak, są to rozszerzone POSIX’owe wyrażenia regularne.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Do czego dopasowany będzie wzorzec .

A

Do każdego pojedynczego znaku bez znaku nowej linii.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

W jaki sposób zdefiniować klasę znaków?

A

Umieszczając każdy ze znaków w parze []

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Kiedy znaki - oraz ] zostaną potrakowane jako literały w klasie znaków?

A

Jeżeli będą umieszczone zaraz za klamrą otwierającą ([)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Co dopasuje klasa znakowa [A-z] ?

A

Małe litery , duże litery oraz znaki punktuacji
dec(‘A’) = 65, dec(‘z’) = 122
Wszystko co jest pomiędzy kodem znakiem A a z z tablicy ASCII

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Czy w tablicy kodowania ASCII duże litery występują przed małymi literami?

A

Tak

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

W jaki sposób zapisać klasę znaków z pominięciem innej klasy znaków?

A

[a-z]{-}[vjk]

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Ile razy dopasuje * (gwiazdka) poprzedzające wyrażenie?

A

Zero lub więcej (gwiazdka Kleene’a)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Ile razy dopasuje + (plus) poprzedzające wyrażenie?

A

Jeden lub więcej, tak jak AA*

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Ile razy dopasuje ? (znak zapytania) poprzedzające wyrażenie?

A

Zero lub jeden (opcjonalne wyrażenie)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Co się traci w momencie zapisu napisu w cudzysłowach? “….”

A

Metaznaki inne niż sekwencje wyjścia z C zostaną utracowe i będą potraktowane bezpośrednio.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Jakie napisy zostaną dopasowane przez wzorzec a(bc|cb)?

A

abc lub acb

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Jakiego znaku używa się do definicji “trailing context”?

A

Znaku /

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Co dopasuje wyrażenie 0/1 w napisie 01?

A

Wyłącznie 0

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Co dopasuje wyrażenie 0/1 w napisie 0?

A

Nic nie dopasuje

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Co dopasuje wyrażenie 0/1 w napisie 02?

A

Nic nie dopasuje

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Ile razy można użyć wyrażenia z trailing context w ramach jednego wzorca?

A

Tylko raz

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Czy zwiększenie złożoności wyrażenia regularnego powoduje, że jest ono wolniejsze do rozpoznania?

A

Nie.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Czy użycie trailing context wpływa na wydajność skanera?

A

Tak, związane jest to z cofaniem dopasowanego tekstu.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

Które dopasowanie zostanie wybrane przez skaner dla poniższych założeń

skanowany tekst +=
wyrażenia
* +
* =
* +=

A

Najdłuższe dopasowanie, czyli +=

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

W przypadku poniższych definicji, która reguła zostanie użyta przez skaner

skanowany tekst if
wyrażenia
* if
* else
* [a-zA-Z]+[0-9A-z]*

A

Reguły pierwsza i trzecia potrafią dopasować skanowany tekst, jednak wygra ta, która jest wcześniej na liście, czyli pierwsza reguła

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Czy funkcja getc() jest blokująca?
Tak, jest blokująca
26
Jak nazywa się alternatywna funkcja getc(), która nie jest blokująca?
getc\_unlocked
27
Podaj definicje typu dla strumienia wejścia stdin
extern FILE \*stdin;
28
W jakim pliku nagłówkowym znajdują się definicje stdin, stdout, stderr
W pliku stdio.h
29
W którym pliku nagłówkowym znajdują się definicje rozmiaru zmiennych całkowitych?
W limits.h
30
W jakiej ścieżce można znaleść pliki nagłówkowe?
/usr/include
31
Jak można użyć funkcji yyrestart do odczytania jeszcze raz przetwarzanego przed momentem pliku?
yyrestart(yyin);
32
Co dzieje się ze zbuforowanym wejściem podczas wywołania funkcji yyrestart?
Zostanie ona wyczysczona i zastąpiona nowymi wartościami.
33
Podaj sygnaturę funkcji fclose.
int fclose(FILE \*fp);
34
Co dzieje się ze zbuforowanym wyjściem podczas wywołania funkcji fclose?
Zostanie zapisane zgodnie z zasadą działania fflush(3)
35
Podaj definicję typu zmiennej yyin.
extern FILE \*yyin;
36
Jak nazywa się struktura opisująca źródło wejścia (plik, zasób sieciowy, itd.)?
YY\_BUFFER\_STATE
37
Jak nazywa się specjalna akcja oznaczająca odczyt nowego pliku?
YY\_NEW\_FILE
38
Jakiej funkcji użyć aby przeanalizować wejście z napisu?
yy\_scan\_string
39
Podaj sygnaturę yy\_scan\_string.
YY\_BUFFER\_STATE yy\_scan\_string(const char \*str);
40
Co wspólnego mają ze sobą funkcję yy\_scan\_bytes oraz yy\_scan\_string?
yy\_scan\_string wywołuje yy\_scan\_bytes
41
Czy można używać makr w lekserze?
Mozna.
42
Które makro odczytuje wejście i wypełnia strukturę YY\_BUFFER\_STATE
YY\_INPUT
43
Jaką funkcję pełni domyślna reguła w analizatorze?
Przepisuje niedopasowane tokeny na wyjście
44
Jak wygląda definicja domyślnej reguły analizatora?
. ECHO;
45
Rozwiń makro ECHO
#define ECHO fwrite( yytext, yyleng, 1, yyout)
46
Jaka opcja pozbywa się reguły domyślnej?
%option nodefault
47
Jaka opcja spowoduje brak wywołania funkcji yywrap()
%option noyywrap
48
Czy kolejne opcje rozdzielane są przecinkiem?
Nie, są rozdzielane spacją
49
Czy opcje skanera należy zakończyć średnikiem?
Nie
50
Do czego służy opcja batch?
Wyłącza całkowicie tryb interaktywny, w którym znaki są czytane jeden po drugim z wejścia przez getc()
51
Do czego służy opcja yylineno?
W globalnej zmiennej yylineno przechowywana będzie aktualna linia odczytana z wejścia
52
Jaką opcją włączyć dodatkowe ostrzeżenia generowane przez analizator?
%option warn
53
Jakiego rezultatu można się spodziewać jeśli użyto opcji yylineno i jednocześnie ta zmienna jest ikrementowana w regule z nową linią?
Nowe linie będą inkrementowane podwójnie.
54
W jaki sposób można zmienić znaczenie znaków ze strumienia znaków?
Używając tablicy translacji
55
W typowej implementacji w jaki sposób przedstawiane są litery alfabetu?
Jako stałe znakowe.
56
Czy można przypisać kod znaku wejścia do wartości rozumianej przez flex'a?
Tak, poprzez tablicę translacji.
57
W jaki sposób definiuje się tablicę translacji?
W sekcji definicji należy umieścić sekcje jak poniżej %T {integer} {character string} ... %T
58
Czy pojedyncze kody znaków mogą być podstawione jako całe napisy?
Tak, jest to możliwe.
59
Jaki mechanizm zapewni warunkowe użycie reguł?
Warunki startu (start conditions)
60
W jaki sposób zdefiniować warunek startu?
Trzeba zastanowić się nad jego interakcją z innymi warunkami, tj. czy ma być inclusive czy exclusive Dla definicji włącznych (inclusive) **%s** STATE\_INCLUSIVE Dla definicji wyłącznych (exclusive) **%x** STATE\_EXCLUSIVE
61
Jaka opcja włącza dodatkowe informacje o przejściach w NFA oraz DFA?
%option trace
62
Na jaki strumień %option trace zapisuje wiadomości?
W strumieniu stderr
63
Która z opcji jest bardziej pomocna z perspektywy twórcy nowego analizatora, trace czy debug?
Opcja debug, trace jest używane do konserwacji samego generatora
64
Która opcja wyświetla użyte podczas generowania analizatora opcje?
verbose
65
Czy wyrażenie **^"#"[\t]\* include[\t]\*[\" \<]** jest równoważne **^"#"[\t]\*"include"[\t]\*[\" \<]**?
Tak, spacje jeżeli mają nie być ignorowane, muszą być zapisane w cudzysłowach
66
Czy funkcja input() zmienia globalną zmienną yytext?
Nie zmienia
67
Czy eksluzywne stany początkowe można traktować jako pod-skanery ze wszystkimi tego konsekwencjami?
Tak.
68
Czy pamięć jest czyszczona po alokacji w malloc?
Nie jest wyczyszczona
69
Jakim makrem można stworzyć bufor stanu (flexowy)?
yy\_create\_buffer
70
Co zwraca makro yyterminate()?
YY\_NULL, czyli 0
71
Jakim makrem można pozbyć się bufora stanu (flexowego)?
yy\_delete\_buffer
72
Czy po zmianie bufora należy wznawiać działanie programu poprzez yylex?
Nie trzeba, jeżeli w akcji EOF nie było nie zwrócono tokena
73
Czym jest makro YY\_BUF\_SIZE?
Zwraca rozmiar bufora wejścia (domyślnie 16kB)
74
W jakiej sytuacji można być świadkiem komunikatu "flex scanner jammed"
W momencie gdy skaner nie jest w stanie dopasować żadnej z reguł do wejścia
75
Jakimi funkcjami można operować na stosie buforów?
**yypush\_buffer\_state** oraz **yypop\_buffer\_state**
76
Czy zmiana buforów przez **yy\_switch\_to\_buffer **zmienia warunek startu?
Nie zmienia
77
Jeżeli redeklarować makro **YY\_INPUT()** tak aby nie używała bufora yyin, czy jest potrzeba przekazywania wskaźnika do zmiennej typu FILE \* do yy\_create\_buffer?
Nie ma takiej potrzeby, wtedy należy przekazać NULL
78
Co zwraca makro **YY\_CURRENT\_BUFFER**?
Zwróci uchwyt do aktualnego bufora.
79
Czy makra **YY\_CURRENT\_BUFFER** można używać jako lwartości?
Nie, to makro zwraca wartość
80
Jakiej funkcji należy zawsze użyć po zakończeniu pracy z buforem?
yy\_delete\_buffer
81
Podaj w sekwencje czynności jakie wykonywane są podczas użycia funkcji yy\_scan\_\*
1. stworzenie nowego bufora wejścia 2. zamiana aktualnego bufora na ten nowo utworzony
82
Czym jest nieprzejrzysty wskaźnik?
Jest to wskaźnik na typ, który nie jest zdefiniowany.
83
Czy niepełny typ może być użyty w deklaracji?
Tak.
84
Jak nazywa się typ danych, którego reprezentacja jest widoczna?
Transparenty (inaczej - widoczny)
85
Czy opcja case-insensitive wpływa w jakikolwiek sposób na strumień wejściowy?
Nie.
86
Zakładając użycie opcji case-insensitive, czy dopasowany tekst jest przekształcany np. na duże litery?
Nie jest modyfikowany w jakikolwiek sposób, yytext będzie zawierał tekst z wejścia.
87
Wymień dwa sposoby obsługi słów kluczowych (space vs time).
1) Skaner może rozpoznawać słowa kluczowe (space - tablica skanera się powiększa) 2) Słowa kluczowe dodawane są do tablicy symboli z flagą (time - dodatkowy czas na odszukanie elementu w tablicy symboli)
88
Podaj strukturę pliku flex'a w rozbiciu na sekcje i znaki definiujące te sekcje, podaj przykład z obecnymi wszystkimi sekcjami.
*%{* **Deklaracje** *%}* **Definicje** *%%* **Reguły** *%%* **Podprogramy użytkownika**
89
Które sekcje leksera są opcjonalne?
Deklaracji, definicji, podprogramów użytkownika.
90
Która sekcja choć opcjonalna jest bardzo często wykorzystywana?
Definicji.
91
W jaki sposób zapisać regułę aby ignorowała wielkość znaków?
(?i:"napis") lub [Nn][Aa][Pp]{iI]{Ss]
92
Jak inaczej można zapisać wyrażenie **r$**
r**/**\n (trailing context dla nowej linii).
93
Czy wyrażenie r$ znajdzie dopasowanie jeżeli sprawdzany strumień zawiera napis r bez znaku nowej linii?
Nie będzie dopasowania z powodu braku znaku nowej linii