Какова процедура, чтобы отделить идентификатор от любой программы? - PullRequest
0 голосов
/ 07 ноября 2010

Я хочу реализовать следующее. Как бы я сделал это в c?

id     ::= letter { letter | digit | _ } | _main
letter ::= a | b | c | d | e | f | g | h | i | j | k | l |
           m | n | o | p | q | r | s | t | u | v | w | x |
           y | z |
           A | B | C | D | E | F | G | H | I | J | K | L |
           M | N | O | P | Q | R | S | T | U | V | W | X |
           Y | Z
digit  ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

1 Ответ

1 голос
/ 07 ноября 2010

Это спецификация для лексического анализатора, который берет последовательность символов и превращает их в лексические элементы (или токены).

Написание лексического анализатора не является задачей для слабонервных и,если вы задаете этот вопрос, вы можете обратиться к lex или flex, чтобы помочь вам :-) Если вам нужно сделать это самостоятельно в C, вам следует исследовать конечные автоматы - это позволит вам преобразовать текстовые элементы влексические токены.

Скорее всего, это говорит о том, что идентификатор состоит из буквы, за которой следует (возможно, необязательная) буква, цифра или символ _, или символов _main (или токена *).1007 *, это не понятно без дополнительной информации.


Другим примером может быть что-то вроде:

digit     ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
integer   ::= digit+
float     ::= integer '.' integer

, который определяет:

  • a digit как один из числовых символов.
  • и integer как последовательность из одной или нескольких цифр.
  • a float как два целых числа, разделенных .символ.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...