Сборник по задачам и примерам Assembler

     

Классы литер



Классы литер

В случае грамматики языка ASMLENG можно определить следующие классы литер:

  • б — цифра;
  • 1 — буква;
  • b — литеры, которые игнорируются (к ним отнесем пробел); ¦ .
  • si - одиночные разделители: + -/:.()[],*"'{}<>;;
  • s2 — двулитерный разделитель: ;;.
  • Определение условий выхода из сканера для каждого класса лексем

    Для каждого класса лексем определим условия, при которых сканер переходит в конечное состояние:

  • для идентификаторов — появление во входном потоке сканера любого символа, отличного от d (цифра) или 1 (буква);
  • ключевые слова — появление пробела и нахождение соответствия введенной лексемы одному из ключевых слов языка;
  • целые числа (константы) — появление любого символа, отличного от d;
  • однолитерные разделители — появление любого символа;
  • двулитерные разделители — появление любого символа; ,;;.

    символьные строки — появление завершающей кавычки. ......г.

  • Построение автоматных грамматик для выделенных классов лексем

    Для каждого класса лексем строится отдельная автоматная грамматика, соответствующая грамматике типа 3 по Хомско.му. В нашем случае набор таких грамматик может выглядеть так, как показано ниже:

  • идентификаторы — id, к которым по принципу построения можно отнести и ключевые слова — название_команды:
  • id=>ASCII_CMMBon_6yKea | id

    ASCII_символ_буква | id decdigit :,; decdigit ^ 0|l|2|...8|9

  • целые числа — chint:
  • digits => decdigit | digits decdigit | digits hexdigit decdigit =>0|l|2|3|4|5|6|7|8|9 ¦

  • Oднолитерные разделители — +-/:.()[]. *"¦'---
  • SEPiL^. . | . | : |: | + | - | * I 4 ) / I L I ] Г Г I

  • двулитерный разделитель — ;;:
  • SEP2L=> : Q



    Содержание раздела