2020-12-24 01:47:21 +03:00
|
|
|
|
##### Утилиты работы с программами на LaMa
|
|
|
|
|
|
|
|
|
|
|
|
Утилита `tools/tool.exe` принимает следующие параметры командной строки
|
|
|
|
|
|
|
|
|
|
|
|
* `-pos L,C` для указания позиции в исходном тексте, по которой необходимо найди идентификатор и его место определения (resolve)
|
2020-12-31 11:31:55 +03:00
|
|
|
|
* `-use` опциональный параметр, который кроме resolve производит поиск использований этого идентификатора
|
2020-12-24 01:47:21 +03:00
|
|
|
|
|
|
|
|
|
|
Пример входного файла:
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
1 public fun foldl (f, acc, l) {
|
|
|
|
|
|
2 -- ^-- (1,19)
|
|
|
|
|
|
3 case l of
|
|
|
|
|
|
4 {} -> acc
|
|
|
|
|
|
5 | x : xs -> foldl (f, f (acc, x), xs)
|
|
|
|
|
|
6 -- (5,22)--^ ^-- (5,25)
|
|
|
|
|
|
7 esac
|
|
|
|
|
|
8 }
|
|
|
|
|
|
9
|
|
|
|
|
|
10 public fun filter (f, l) {
|
|
|
|
|
|
11 case l of
|
|
|
|
|
|
12 {} -> {}
|
|
|
|
|
|
13 | h : t -> if f (h) then h : filter (f, t) else filter (f, t) fi
|
|
|
|
|
|
14 esac
|
|
|
|
|
|
15 }
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
Пример запуска: `LAMA=./runtime tools/tool.exe tools/demo1.lama -pos 5,22 -use`
|
|
|
|
|
|
|
|
|
|
|
|
В выводе утилита находит определение символа `f` на позиции (1,19) и два его использования на позициях (5,25) и (5,22)
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
found definition for `f` at (1,19)
|
|
|
|
|
|
Total 2 usages found
|
|
|
|
|
|
(5,25) (5,22)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
###### Поддерживаемые синтаксические конструкции
|
|
|
|
|
|
|
|
|
|
|
|
Утилита работает для определний функций, их аргументов и локальных определений переменных.
|
2020-12-31 11:31:55 +03:00
|
|
|
|
|