【问题标题】:Token must begin at start of line令牌必须从行首开始
【发布时间】:2020-04-13 15:40:56
【问题描述】:

所以我在我的 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

它不应该工作

【问题讨论】:

标签: token lex


【解决方案1】:

您可以将^ 放在 (f)lex 模式的开头,这将导致该模式仅在它位于输入的开头或紧跟换行符之后才匹配。

请参阅the Flex manual 以获取可接受的正则表达式语法的完整列表。 (这不是一个很长的文件。)

【讨论】:

    猜你喜欢
    • 2018-12-07
    • 2022-10-18
    • 2013-09-14
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 2012-03-17
    • 2016-03-28
    相关资源
    最近更新 更多