Cвалка basic компиляторов

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Cвалка basic компиляторов

Сообщение FireFenix » 07.07.2011 (Чт) 23:21

Хакер писал(а):В общем, счётчик это не проблема, но я изначально обращался к FireFenix-у.

С чётностью была идея типа
Код: Выделить всё
        Dim Text As String = "Msgbox "" A ' B """" C """" D ' E "", F, ""G"" ', H ' I "" J ' """" K ' "" '"
        Text &= ChrW(13) & ChrW(10) & "'Коммент1"
        Text &= ChrW(13) & ChrW(10) & "MsgBox(""Hello!"") REM коммент2"
        Text &= ChrW(13) & ChrW(10) & "Box(""H!"") 'ababa"
        Text &= ChrW(13) & ChrW(10) & "REM коммент3"
        Text &= ChrW(13) & ChrW(10) & "Console.WriteLine(1464) REM коммент3"

        Dim Delims As Char() = {ChrW(13), ChrW(10)}

        Dim Lines As String() = Text.Split(Delims, StringSplitOptions.RemoveEmptyEntries)

        Dim Pos As Integer
        Dim LastPos As Integer
        Dim Comment As Integer
        Dim Count As Integer


        For i = 0 To Lines.Length - 1
            LastPos = Lines(i).IndexOf("""", Pos)

            If LastPos > -1 Then
                Pos = Lines(i).IndexOf("""", LastPos + 1)

                If Pos > 0 Then
                    Comment = Lines(i).IndexOf("REM ", 0, Pos, StringComparison.OrdinalIgnoreCase)

                    If Comment > -1 Then
                        Console.WriteLine("Comment! Pos=" & Comment & "|  Line=" & i)
                    End If
                End If

                While Pos > -1 And Pos < Lines(i).Length - 1
                    LastPos = Lines(i).IndexOf("""", Pos + 1)

                    If LastPos > -1 Then
                        Comment = Lines(i).IndexOf("'", Pos, LastPos - Pos)

                        If Comment > -1 Then
                            Console.WriteLine("Comment! Pos=" & Comment & " | Line=" & i)
                        Else
                            Comment = Lines(i).IndexOf("REM ", Pos, LastPos - Pos, StringComparison.OrdinalIgnoreCase)

                            If Comment > -1 Then
                                Console.WriteLine("Comment! Pos=" & Comment & "|  Line=" & i)
                            End If
                        End If
                    Else
                        Comment = Lines(i).IndexOf("'", Pos, Lines(i).Length - Pos - 1)

                        If Comment > -1 Then
                            Console.WriteLine("Comment! Pos=" & Comment & " | Line=" & i)
                        Else
                            Comment = Lines(i).IndexOf("REM ", Pos, Lines(i).Length - Pos - 1, StringComparison.OrdinalIgnoreCase)

                            If Comment > -1 Then
                                Console.WriteLine("Comment! Pos=" & Comment & "|  Line=" & i)
                            End If
                        End If

                        Exit While
                    End If

                    Pos = Lines(i).IndexOf("""", LastPos + 1)
                End While
            ElseIf Lines(i).Substring(0, 3).ToUpper = "REM " Or Lines(i).Substring(0, 1).ToUpper = "'" Then
                Console.WriteLine("Comment! Pos=0 | Line=" & i)
            Else
                Comment = Lines(i).IndexOf(" REM ", 0, Lines(i).Length - 1, StringComparison.OrdinalIgnoreCase)

                If Comment > -1 Then
                    Console.WriteLine("Comment! Pos=" & Comment & " | Line=" & i)
                End If
            End If

            Count = 0
            Pos = 0
            Comment = 0
        Next

Но у Qwertiy прямой проход и меньше циклов => мой вариант не рационален (хотя, наверное в некоторых случаях может быть одинаковым по производительности)

Хакер писал(а):Пусть сделает это регулярками.

Ну на самом деле это ещё то извращение и не факт, что можно предопределить все исключающие конструкции, спецификой языка регулярок

По мне так, если уже работать с извращёнными конструкциями, так уже писать полноценный парсер, который разделит все сущности по спецификации
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Cвалка basic компиляторов

Сообщение Хакер » 07.07.2011 (Чт) 23:26

FireFenix писал(а):
Код: Выделить всё
        Dim Delims As Char() = {ChrW(13), ChrW(10)}

        Dim Lines As String() = Text.Split(Delims, StringSplitOptions.RemoveEmptyEntries)


Облом:
Код: Выделить всё
' Комментарий _
это тоже
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Cвалка basic компиляторов

Сообщение FireFenix » 07.07.2011 (Чт) 23:27

Хакер писал(а):
Код: Выделить всё
' Комментарий _
это тоже

Если ты про разделение кода по строкам - то да, а если просто подчёркивание, то проглотит :)

А разве VB6 держит многострочные комментарии?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Cвалка basic компиляторов

Сообщение Хакер » 07.07.2011 (Чт) 23:39

FireFenix писал(а):А разве VB6 держит многострочные комментарии?

Обязательно :)

Код: Выделить всё
Rem первая строка комментария _
      вторая строка комментария _
      третья строка

' первая _
      вторая _
      третья _
      четвёртая

.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Cвалка basic компиляторов

Сообщение jangle » 10.08.2011 (Ср) 11:28

Допустим некто написал свой компилятор бейсика, и теперь встал вопрос, как назвать свое творение?
На самом деле сложная проблема, все более менее красивые названия уже разобраны другими, а придумать что-то свое сложно. Например как вам такое название:

Win Basic Compiler - WBC -> wbc.exe

Win - сокращенное название от Windows остальное все понятно

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Cвалка basic компиляторов

Сообщение Admiralisimys » 10.08.2011 (Ср) 16:07

jangle если компилятор постигнет успех, думаю за название возьмётся Микрософт, как в своё время взялись за Windows Commander, который после этого стал Total Commander. Или как в менее известном случаи с Lindows. Но там не распространённость сыграла роль.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Cвалка basic компиляторов

Сообщение Хакер » 10.08.2011 (Ср) 16:59

Не возьмётся. Или купит и сгноит.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Cвалка basic компиляторов

Сообщение ger_kar » 11.08.2011 (Чт) 6:02

Значит продавать не надо :) Не все продается, хотя уже почти все :(
Бороться и искать, найти и перепрятать

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Cвалка basic компиляторов

Сообщение FireFenix » 11.08.2011 (Чт) 14:33

Или делать опен сорс и всем народом пилить
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: Cвалка basic компиляторов

Сообщение FaKk2 » 12.08.2011 (Пт) 2:49

FireFenix писал(а):Или делать опен сорс и всем народом пилить

Опен сорс, да, да :)

Вон они про C++0x уже почти 15 лет не могут договориться...
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Пред.

Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 53

    TopList