Токен должен начинаться в начале строки - PullRequest
2 голосов
/ 13 апреля 2020

Итак, я получил эти токены в своем файле lex:

\$\$.*          ; /* comment */
\$(.|\n)*\$     ; /* comment */
">="            return GE; 
"<="            return LE; 
":="            return AT;
"~="            return NEQ;
"if"            return IF; 
"else"          return ELSE;
"then"          return THEN;
"elif"          return ELIF;
"fi"            return FI;
"for"           return FOR;
"until"         return UNTIL;
"step"          return STEP;
"do"            return DO;
"done"          return DONE;
"repeat"        return REP;
"stop"          return STOP;
"return"        return RET;
"program"       return PROG;
"module"        return MOD;
"start"         return ST;
"end"           return END;
"void"          return VD;
"const"         return CT;
"number"        return NB;
"array"         return ARR;
"string"        return SG;
"function"      return FC;
"public"        return PB;
"forward"       return FW;

И я хотел знать, есть ли способ сделать совпадение токена, только если он начинается в начале строки. Например, если в моей программе я пишу это так:

start

Это должно работать, но если я делаю:

    start 

или

program start

, это должно не работает

1 Ответ

0 голосов
/ 13 апреля 2020

Вы можете поместить ^ в начало лексического шаблона (f), что приведет к тому, что шаблон будет совпадать, только если он находится в начале ввода или сразу после символа новой строки.

См. руководство по Flex для получения полного списка допустимых синтаксисов регулярных выражений. (Это не очень длинный документ.)

...