- Код: Выделить всё
sub main()
Msgbox Hello
end sub
function Hello() as string
function="Hello World"
end function
Лексический анализатор строит по нему таблицу. Где первый столбец - токен, второй - класс токена, третий - ID класса.
На самом деле столбцов больше, там еще хранится строка и позиция в которой лежит токен в исходнике.
- Код: Выделить всё
sub - IDENT - 8
main - IDENT - 1
( - LPARM - 4
) - RPARM - 5
- EOL - 10
Msgbox - IDENT - 1
Hello - String - 1
- EOL - 10
end - IDENT - 8
sub - IDENT - 8
- EOL - 10
- EOL - 10
function - IDENT - 1
Hello - String - 1
( - LPARM - 4
) - RPARM - 5
as - IDENT - 1
string - IDENT - 1
- EOL - 10
function - IDENT - 1
= - Delimiter - 9
Hello World - Quote_String - 3
- EOL - 10
end - IDENT - 8
function - IDENT -1
- EOL - 10
- EOP - 11
Эта таблица является источником данных для семантического анализатора. Допустим он читает токены в буфер начиная с первого и до тех пор пока не попадется EOL. Получается
- Код: Выделить всё
IDENT, IDENT, LPARM , RPARM , EOL
Дальше необходима проверка этого кода. Пока ничего кроме таблицы "с правилами" в голову не приходит. Проблема в том, что в таблице получается слишком много вариантов правил, и все их описать невозможно. Например анализатор пойдет дальше и прочитает
- Код: Выделить всё
Msgbox - IDENT, Hello - String , EOL