1

Я пытаюсь нарисовать FSM для поиска маркеров с использованием дал MicrosyntaxDrawing конечный автомат (FSM) для поиска маркеров с помощью дали Microsyntax

microsyntax 
// Uses .Net regular expression syntax. 

Identifier <|[a-zA-Z][\w_.]* 

IntegerValue <|\d+ 

// real values must include a decimal point. 
RealValue <|\d*\.\d+ 

// Note that strings do not have any escape characters 
// and will be prematurely terminated with a newline. 
StringValue <|"[^"\n]*" 

Моя схема для ФШМ выглядит следующим образом: enter image description here

Я не уверен, что диаграмма, которую я сделал, абсолютно верна. Моя путаница в диаграмме рисования лежит в: 1) петлевый переход для Идентификатора a-z, A-Z, _. 2) переход от целого к realValue: состояние 3 будет иметь петлевый переход от 0-9? и 3) переход к stringValue.

Было бы очень полезно, если бы кто-нибудь мог сообщить мне, правильна ли диаграмма или нет, каковы мои ошибки?

ответ

1

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

Проблема с состоянием 3 является то, что:

8. 

не соответствует ни \d+, ни \d*.\d+; первый из-за . и последний, потому что он настаивает хотя бы на одну цифру после .. Следовательно, состояние 3, где вы находитесь после чтения 8., не является окончательным. Как только он получает другую цифру, он переходит в состояние 4 (так что нет цикла), который является правильным окончательным.

Я бы написал состояние 1 с одной петлей вместо двух, но я не думаю, что это имеет значение. Кроме того, семантическая метка в состоянии 6 (не окончательная) должна идти в состоянии 7 (окончательный). (О, и это не помешало бы обозначить начальное состояние, хотя это было очевидно в конце.)

HTH.

+0

Спасибо за ответ. Но что, если реальная стоимость была равна 1,5? не будет ли он останавливаться на седьмом 3 с петлевым переходом? Поскольку реальное значение может иметь более одной десятичной точки, например, 1,5 или 1,25. Если реальное значение равно 1,5, то не будет указано 3 окончательным, а если значение равно 1,25, то sate 4 будет окончательным? – Sujal

+0

Переход в состояние 3 из состояния 2 происходит, когда он читает '.'. У вас есть два исходящих перехода из состояния 3 на цифрах: неправильный, который петли, и правильный, который переходит в состояние 4. Когда он читает '5' в' 1.5', он должен перейти в состояние 4 (принятие). Таким образом, это будет только в состоянии 3 после прочтения '.', И это не допустимое число в соответствии с вашим синтаксисом. – rici

+0

Спасибо! Это имеет смысл – Sujal

 Смежные вопросы

  • Нет связанных вопросов^_^