Latest post of the previous page:
https://google.com/search?q=lua+lexical+analysisразделить строку кода и строчный комментарий в конце этой строки RegExp-ом, или как-то еще?
разделить строку кода и строчный комментарий в конце этой строки RegExp-ом, или как-то еще?
John Doe, Это понятно что изобретать велосипеды это плохая практика.
И все же, стоит ли так углублятся,
если предложенное мною выглядит достаточно просто, не?
И все же, стоит ли так углублятся,
если предложенное мною выглядит достаточно просто, не?
- buniak_a_h
- Posts: 4262
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
разделить строку кода и строчный комментарий в конце этой строки RegExp-ом, или как-то еще?
Именно так и устроена та прога, что я Вам посылал.
разделить строку кода и строчный комментарий в конце этой строки RegExp-ом, или как-то еще?
buniak_a_h, это LuaComplete или то что на паскале?
- John Doe
- Бюрократ
- Posts: 13853
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
разделить строку кода и строчный комментарий в конце этой строки RegExp-ом, или как-то еще?
Зависит от того насколько строго должен быть осуществлён отбор, плюс сколько времени вы готовы дополнительно потом инвестировать в доводку своего велосипеда, при каждой встрече с нетипичным случаем.
Замечу также, что модуль luacheck, который наверняка у вас тоже установлен, содержит и парсер, и лексер (но как приспосособить их интерфейсы к вашей задаче сходу не скажу конечно).
https://t.me/FarManager — Telegram чат
- buniak_a_h
- Posts: 4262
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
разделить строку кода и строчный комментарий в конце этой строки RegExp-ом, или как-то еще?
Это то, что на паскале.
разделить строку кода и строчный комментарий в конце этой строки RegExp-ом, или как-то еще?
как всегда прав, а я как всегда захотел протестировать свои speed coding abilities, с как всегда удручающим успехом.
За три часа включая перерывы, получилось такое нa C# ,
на условия задачи отвечает целиком и полностью,
учитываются блочные строки и комментарии input:
local a1 = [[ -- aaa -- bbb ccc ]] xxx --[[ hello ? ]] yyy --[===[ hello 222 ]===] -- line comment here
output:
PSint_out_pos_idx_cmnt = 83 sz_out_lua_code = "local a1 = [[ -- aaa -- bbb ccc ]] xxx --[[ hello ? ]] yyy --[===[ hello 222 ]===] " sz_out_lua_cmnt = "-- line comment here" sz_out_lua_mask = "local a1 = ####################### xxx ############### yyy ####################### -- line comment here"
одинарных кавычек в примере нету, так как это "слишком легко", были в первых тестах,
а скопипастил я второй и более сложный тест на flow block, которые по сути много-символьные кавычки.
Не прогоняя еще раз, просто напишу так:
input:
local a1 = ' -- aaa -- bbb ccc '..xxx --[[ hello ? ]]..yyy..[[ hello 222 ]] -- line comment here
output:
UPDATE 21/03/2021int_out_pos_idx_cmnt = 77 sz_out_lua_code = "local a1 = ' -- aaa -- bbb ccc '..xxx --[[ hello ? ]]..yyy..[[ hello 222 ]] " sz_out_lua_cmnt = "-- line comment here" sz_out_lua_mask = "local a1 = #####################..xxx ###############..yyy..############### -- line comment here"
Немного косметики
Last edited by citRiks on Sat 20 Mar, 2021 23:06, edited 3 times in total.
разделить строку кода и строчный комментарий в конце этой строки RegExp-ом, или как-то еще?
в копилку паттернов, это взято из МобДебуг @П.Кульченко:buniak_a_h wrote: ↑Wed 17 Feb, 2021 17:23 P/S. Вот такие паттерны работают:
Line:match([[^(.*%b"".-)%-%-]]), regex.match(Line, [[^(.*['"].*['"].*)--]])
Если несколько литералов - работают тоже.
Первый работает только для литералов, заключённых в двойные кавычки.
Второй не будет работать, если внутри литерала с одним типом кавычек имеется символ другой (здесь «кавычками» я называю и апостроф'
, и кавычки"
)
Взято откуда-то:-- remove block comments: :gsub("%-%-%[(=*)%[.-%]%1%]", "") -- remove line comments :gsub("%-%-.-\n", " ")
-- remove line comments: :gsub(s, "%-%-+(.*)$", "%1") :gsub(s, "%-%-+ ?(.*)$", "%1")
разделить строку кода и строчный комментарий в конце этой строки RegExp-ом, или как-то еще?
PS2
Кажется что наиболее разумно было бы решать подобное через LPEG все же,
с прибавочной стоимостью "знать LPEG".
если бы уже в процесс писания я не вспомнил бы про проблему "блочные/потоковые каменты и кавычки", написал бы через LPEG, но увы ..
Кажется что наиболее разумно было бы решать подобное через LPEG все же,
с прибавочной стоимостью "знать LPEG".
если бы уже в процесс писания я не вспомнил бы про проблему "блочные/потоковые каменты и кавычки", написал бы через LPEG, но увы ..
-
- Posts: 6834
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
разделить строку кода и строчный комментарий в конце этой строки RegExp-ом, или как-то еще?
В мануале LPeg есть готовый пример для Lua's long strings. Модифицировать его для комментариев должно быть очень просто.
- buniak_a_h
- Posts: 4262
- Joined: Sat 20 Apr, 2013 00:17
- Location: Санкт-Петробад
- Has thanked: 222 times
- Been thanked: 644 times
- Contact:
разделить строку кода и строчный комментарий в конце этой строки RegExp-ом, или как-то еще?
1. Я не знаю, что такое LPEG. Предположил, что язык регэкспов.
2. А как быть с литералами? А, например,
--[[qqq]]
- это блочный комментарий, а ---[[qqq]]
- строковый.3. А ещё блочные комменты и литералы
[[…]]
могут быть многострочными. Вам же писали:
Last edited by buniak_a_h on Sat 20 Mar, 2021 20:00, edited 1 time in total.
разделить строку кода и строчный комментарий в конце этой строки RegExp-ом, или как-то еще?
ваши замечания имеют смысл, рад прояснить
лексический анализ, парсит структуру (грамматику) языков, текстовые форматы
* многострочность - это просто другая буква для пробела, так же как и, например, ТАБ
Parsing Expression Grammar,buniak_a_h wrote: ↑Sat 20 Mar, 2021 19:58 1. Я не знаю, что такое LPEG. Предположил, что язык регэкспов.
лексический анализ, парсит структуру (грамматику) языков, текстовые форматы
* такую элементарщину даже я в своем коде выше решилbuniak_a_h wrote: ↑Sat 20 Mar, 2021 19:58 2. А как быть с литералами? А, например, --[[qqq]] - это блочный комментарий, а ---[[qqq]] - строковый.
3. А ещё блочные комменты и литералы [[…]] могут быть многострочными.
* многострочность - это просто другая буква для пробела, так же как и, например, ТАБ
у меня в приведенном коде все строго, прямо как в детском садуbuniak_a_h wrote: ↑Sat 20 Mar, 2021 19:58 Вам же писали:
John Doe писал(а): ↑Чт 18 фев, 2021 13:47
Зависит от того насколько строго должен быть осуществлён отбор
Last edited by citRiks on Sat 20 Mar, 2021 22:26, edited 1 time in total.