2012-09-24 2 views
2

나는 오랫동안 문법을 연구 해왔다.하지만 지금은 큰 코드 기반에서 시도 할 때이 성가신 문제가 발생한다. 예를 들어 "INDEX"와 같은 ID를 구문 분석하려고 할 때 'INDEX'를 찾는 또 다른 규칙이 있는데 파서가 실패합니다. 나는이 문제를 설명하기위한 예시 문법을 만든 : 나는 "@some = 'some'"을 구문 분석하려고 해요 그래서ANTLR ID가 렉서 규칙과 섞이게된다.

public variable : '@' ID '=' STRING; 
index : INDEX; 
WS : (' '|'\r'|'\t'|'\u000C'|'\n') {Skip();}; 
INDEX : 'INDEX';  
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; 
STRING : '\'' (ESC_SEQ | ~('\\'|'\''))* '\''; 

를 잘 작동하지만, "@index = 'some'는"C 번호에 AST를 나에게 {<mismatched token: [@1,1:5='index',<8>,1:1], [email protected]='some'>}

출력을 제공하다 . 해결 방법에 대한 아이디어가 있으십니까?

답변

1

변수 이름 렉서 규칙을 만들 수 있습니까?

public VARIABLENAME : '@' ID 

이렇게하면 키워드는 계속 작동하지만 변수 이름을 간섭하지 않습니다. 나는 그것이 작동 인덱스 렉서 규칙을 제외하면

public variable : VARIABLENAME '=' STRING; 
0

"INDEX"규칙없이 문법을 사용하고 AST 통과의 C# 코드에서이 규칙을 수동으로 확인하십시오.

+0

,하지만 내 큰 문법에서 나는 사람들의 수백이 있습니다

variable 규칙

는에 수정 될 것이다. 그러면 문법의 모든 단어를 제거하고 확인해야합니다. ID로 모든 것을 구문 분석하고 나중에 처리하는 것은 나에게 의미가 없습니다. 그렇게하면 효과가 있습니까? – JakobHagg