и через рекурсию. Первый вариант у меня работает, но не подходит из-за проблем с мультипоточкой. Второй вариант видимо я как-то неправильно использую, так как у меня он заходит в него один раз, и в следующий вызов не передается стейт. Выглядит так:
rule read section =
parse
| "---"name+"---" { printfn "1. %A" section; read (lexeme lexbuf) lexbuf }
| whitespace { printfn "2. %A" section; read section lexbuf }
| newline { printfn "3. %A" section; read section lexbuf }
| '=' { EQUALITY }
Кейс у меня такой:
---types---
some data
---functions---
another some data
---etc---
...
Т.е. я хочу при считывании находить “секцию” types, functions, etc, и хранить ее значение в section
Как поченить?
Ну что, у нас по FsLexYacc нет специалистов?
наверное буквально 2
https://youtu.be/EHDmhm2iXqE?t=19
Да по приколу решил распарсить TL язык
А зачем там лекс якк, его ж так собрать можно
Можно, но LexYacc более подходящая тулза кмк, на будущее полезно будет иметь знания
Ты же читал отчёты тех, кто этим занимался до тебя? И что им это не пригодилось? И что у нас в tdsharp уже есть kinda parser?
Я не знаю что из этого лучше, но глянул бы ещё fparsec. Но, думаю, ты в курсе?
Почему не пригодилось? 🤔
Кстати, про fparsec не вспомнил
Потому что там схема совершенно наркоманская, и не заводится без костылей.
Наркоманская в плане синтаксиса TL?
В плане самой организации. Она не вся нужна.
Мне кажется ещё проще спарсить как есть и забить хуй с построением грамматик и прочего
Да там на самом деле из пишется, я бы не сказал что какое-то сложное. Просто язык позволяющий более абстрактно писать правила парсинга. Это так же тип зачем F#, если можно то же самое на C# написать)
Обсуждают сегодня