1
토큰을 "새 줄 시작을 제외한 모든 문자"와 같이 설정해야합니다. 나는 시험해 본다한 문자열에서만 시작 조건을 인식하십시오 lex
[^^]
그러나 이것은 효과가 없다. 첫째, 나는 몇 가지 패턴 라인 감지해야합니다
%s arithm secOper
NUMBER [0-9]+
INTEGER (-?[0-9]+)
ASSIGN [=]
VARY [A-Za-z][?-i:a-z0-9]{0,15}
ARITHMSIGNS (\+[ ]*|\-[ ]*|\*[ ]*|\/[ ]*)
SPACE [ ]+
SPACES [ ]*
ANY [^^]
%%
^{NUMBER}{SPACES}{VARY}{SPACES}{ASSIGN}{SPACES}({VARY}|{INTEGER}) {BEGIN(arithm);}
<arithm>{ANY}{SPACES}{ARITHMSIGNS}/({VARY}|{INTEGER}) {BEGIN(secOper);}
<secOper>{VARY}|{INTEGER}$ {BEGIN(INITIAL);}
%%
그래서 문자열
54 firstVar = 43 * newVar
같은 것은 정말 사실이지만, 입력 인 경우에
54 firstVar = 43
* newVar
(2 문자열 C와 같은 \ n 스트림)은 오류가 아니지만 패턴이 인식해야합니다. 하나의 입력 행에서 모든 시작 조건을 인식해야합니다. 내가 어떻게 할 수 있니?
이 작업은 언어가 아닌 작업이며, 나는 들소없이해야합니다. 따라서 토큰 개행을 만들고 사용하면 상황이 바뀌지 않습니다. – freakz