Массив констант

Тема в разделе "Общие вопросы по С и С++", создана пользователем Pegas, 10 апр 2007.

Статус темы:
Закрыта.
  1. Pegas

    Pegas Гость

    Здравствуйте! Проблема заключается в следующем: Нужно открыть файл, найти в нём все константы и сохранить их в таблицу констант (пишу компилятор для языка С). Как найти в тексте числа?
    У меня есть предположение, что можно создать массив чисел от 0 до 9, а потом сравнивать каждый символ текста с элементами массива. Может кто-нибудь знает более оптимальное решение?
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-Pegas+10:04:2007, 10:01 -->
    <span class="vbquote">(Pegas @ 10:04:2007, 10:01 )</span><!--QuoteEBegin-->найти в нём все константы
    [snapback]61926" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Что ты подразумеваешь под константами?
     
  3. Pegas

    Pegas Гость

    <!--QuoteBegin-European+10:04:2007, 10:11 -->
    <span class="vbquote">(European @ 10:04:2007, 10:11 )</span><!--QuoteEBegin-->Что ты подразумеваешь под константами?
    [snapback]61930" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    числа типа integer, float и т.д.

    Допусим есть в тексте программы выражение:

    A = 123 + V;

    Мне нужно выделить 123 и поместить это число в таблицу констант
     
  4. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Ну тут удобнее использовать стандартную библиотеку, в которой определены функции:
    isdigit() - проверка цифр
    isalpha() - проверка букв
    isalnum() - проверка букв и цифр
    Используя их совместно с алгоритмами find, find_first и find_if можно упростить задачу и сделать код ясным и понятным

    <!--QuoteBegin-Pegas+10:04:2007, 10:01 -->
    <span class="vbquote">(Pegas @ 10:04:2007, 10:01 )</span><!--QuoteEBegin-->Может кто-нибудь знает более оптимальное решение?
    [snapback]61926" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Если надо пройти по всему файлу, то где здесь оптимизировать? Хотя я говорю только о работе с файлами, а не принципах работы компиляторов
     
  5. Pegas

    Pegas Гость

    <!--QuoteBegin-European+10:04:2007, 10:24 -->
    <span class="vbquote">(European @ 10:04:2007, 10:24 )</span><!--QuoteEBegin-->isdigit() - проверка цифр
    isalpha() - проверка букв
    isalnum() - проверка букв и цифр
    [snapback]61932" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Если можно, подскажите пожалуйста, в какой библиотеке находятся эти функции? Никогда раньше не приходилось использовать, и эта библиотека есть в Turbo C?
     
  6. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-Pegas+10:04:2007, 10:31 -->
    <span class="vbquote">(Pegas @ 10:04:2007, 10:31 )</span><!--QuoteEBegin-->Если можно, подскажите пожалуйста, в какой библиотеке находятся эти функции?
    [snapback]61934" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    В стандартной библиотеке языка С++ (файл stlib.h в VS)
    <!--QuoteBegin-Pegas+10:04:2007, 10:31 -->
    <span class="vbquote">(Pegas @ 10:04:2007, 10:31 )</span><!--QuoteEBegin-->эта библиотека есть в Turbo C?
    [snapback]61934" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Не знаю, но думаю что нет.
    P.S.> А может ну его этот Turbo C? :)
     
  7. Pegas

    Pegas Гость

    <!--QuoteBegin-European+10:04:2007, 10:39 -->
    <span class="vbquote">(European @ 10:04:2007, 10:39 )</span><!--QuoteEBegin-->P.S.> А может ну его этот Turbo C?
    [snapback]61935" rel="nofollow" target="_blank[/snapback]​
    [/quote]


    Полностью согласен, но в универе компы допотопные и на них не запускаются проги с Visual St. Для запуска нужно установить саму VS. А вот простой досовский воспринимает как родного :) . А вобще мне больше нравится С#, я на нём уже пытался игрушку простую написать, довольно не плохой язык, так ладно что-то я увлёкся :) .

    Если таких функций нет в Turbo C, тогда может что-нибудь ещё посоветуете?
     
  8. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-Pegas+10:04:2007, 10:57 -->
    <span class="vbquote">(Pegas @ 10:04:2007, 10:57 )</span><!--QuoteEBegin-->но в универе компы допотопные и на них не запускаются проги с Visual St
    [snapback]61938" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    А какая Винда?

    <!--QuoteBegin-Pegas+10:04:2007, 10:57 -->
    <span class="vbquote">(Pegas @ 10:04:2007, 10:57 )</span><!--QuoteEBegin-->тогда может что-нибудь ещё посоветуете?
    [snapback]61938" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Ну тогда RTL-евский вариант _isctype
     
  9. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Функция такая в любом случае это лишь малая часть работы :)
    Код (Text):
    int MyIsDigit(char ch)
    {
    return (ch>='0' && ch<='9');
    }
     
  10. Pegas

    Pegas Гость

    Большое спасибо, думаю теперь всё пойдёт как по маслу ;)
     
  11. GRLEX

    GRLEX Гость

    а я бы посоветовал создать граф переходов, а затем автомат (матрицу), и таблицы грамматик.
    если корректно указать все случаи, то числа будет разбирать автоматически.
    И у тебя получится в итоге таблицы: констант, служебных слов.....

    Как то давно писал, правдо для учебного языка - очень даже неплохо работает с автоматом.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей