Giter VIP home page Giter VIP logo

Comments (16)

ForNeVeR avatar ForNeVeR commented on June 24, 2024

Внезапно, в грамматике тоже только int. Я пофикшу в парсере, а ты посмотри грамматику - всё ли там ок?

from lens.

ForNeVeR avatar ForNeVeR commented on June 24, 2024

Исправлено. Тикет не закрываю - вдруг ещё что-то найдём.

from lens.

impworks avatar impworks commented on June 24, 2024

Не парсится такая, вполне вроде бы легальная строка:

1.GetHashCode ()

А вот такая - вполне:

(1).GetHashCode ()

Посмотри пожалуйста, почему так происходит. Может быть, бага в грамматике?
P. S. Строчка ниже не только парсится, но уже работает :)

from lens.

ForNeVeR avatar ForNeVeR commented on June 24, 2024
lvalue = [ type "::" ] identifier { accessor_expr } | "(" expr ")" accessor_expr { accessor_expr }

Как видишь, для применения accessor_expr нужно брать expr в скобки. Я бы не стал сейчас это менять - кажется, без этого у нас могут возникнуть какие-нибудь проблемы.

Точно. Убрал в парсере скобки и получил StackOverflowException на этапе парсинга.

@impworks, считаю такое изменение лишним, раз уж оно валит парсер. Для lens 2.0 мы, может, запилим самодельный парсер или что-нибудь в этом роде, а пока что не вижу смысла вносить такие ломающие изменения.

from lens.

impworks avatar impworks commented on June 24, 2024

Попробуй такие изменения в грамматике:

lvalue              = [ type "::" ] identifier { accessor_expr } | atomar_expr accessor_expr { accessor_expr }
value_expr          = atomar_expr | lvalue
atomar_expr         = literal | type_operator_expr | "(" expr ")"

from lens.

ForNeVeR avatar ForNeVeR commented on June 24, 2024

Охххх, запилил-таки эти изменения. Было страшно, но я выдержал! Написан тест, грамматика изменена в соответствии с твоим предложением. Единственное - пришлось поменять порядок узлов в value_expr (из-за чего и были проблемы).

from lens.

impworks avatar impworks commented on June 24, 2024

Сначала lvalue? А почему так стало лучше?

from lens.

ForNeVeR avatar ForNeVeR commented on June 24, 2024

Видимо, при противоположном расположении узлов в парсере получался какой-то ненужный цикл, который он не мог правильно разорвать. У меня есть идея, почему это может происходить и как с этим бороться, но без особой надобности это средство применять бы не хотелось - может сильно сказаться на производительности.

from lens.

impworks avatar impworks commented on June 24, 2024

Нашел еще один баг. В тестах BareLambda и ParametricLambda создается FunctionNode - видимо, я забыл это поменять, когда проводил рефакторинг. Должна создаваться LambdaNode.

from lens.

impworks avatar impworks commented on June 24, 2024

Не парсится следующий, на мой взгляд, корректный код:

fun test -> 10
test ()

Почему?

from lens.

ForNeVeR avatar ForNeVeR commented on June 24, 2024

В тестах BareLambda и ParametricLambda создается FunctionNode

Исправлено: 855be00. Оказалось, что лямбды есть ещё в паре тестов - там тоже поправил.

from lens.

ForNeVeR avatar ForNeVeR commented on June 24, 2024

Не парсится следующий, на мой взгляд, корректный код

Была проблема в грамматике - после funcdef не ожидался перевод строки. Было:

funcdef             = "fun" identifier func_params "->" block

Стало:

funcdef             = "fun" identifier func_params "->" block NL

Добавил тест, починил грамматику и парсер. 9c415f3.

from lens.

impworks avatar impworks commented on June 24, 2024

Не было бы правильнее требовать от самого block, чтобы он заканчивался
переносом строки или EOF? Чтобы еще где-нибудь не забыть.

from lens.

ForNeVeR avatar ForNeVeR commented on June 24, 2024

Дело в том, что там не только block, но и local_expr, от которого
требовать новой строки нелогично. Сначала я так и попробовал, но отвалился
код с однострочным if-then-else.

from lens.

impworks avatar impworks commented on June 24, 2024

Почему-то не парсятся операторы <= и >=.
См. тест OverloadedOperators.

from lens.

ForNeVeR avatar ForNeVeR commented on June 24, 2024

Была проблема в грамматике и парсере, пофикшено: 96528e0.

from lens.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.