컴파일러 관련 클래스의 프로그래밍 배정의 일부입니다. 나는 플렉스 들소 대신에 ANTLR을 사용하도록 교사에게 제안했으며, 여기서 그는 우리가 원하는 모든 것, 즉 어휘, 구문 및 의미 분석 (아래 이미지의 처음 세 단계)을 수행하도록 요청합니다. ANTLR을 사용하여 그러한 분석기를 만드는 것이 매우 쉽다는 것을 확신합니다. 컴파일러의 중간 및 객체 코드
저는 ANTLR4를 Python 3.4.2로 배우고 있습니다. 여기서 목표는 여러 줄의 파이썬 코드를 규칙의 {} 안에 작성하는 것입니다. 컴파일하고 제기하지 않는 ...
term
: term '*' fact
| term '/' fact
{
print('a')
}
| fact
{
print('b'
구문 분석 중에 함수에 모든 경로가 반환되는지 확인하는 방법을 궁금합니다. 그래서 내 질문은 유효한 함수가 후 return 문 아무것도를해야한다는 것입니다 function: STRING OPEN statement CLOSE
statement: RETURN expr | PRINT expr | IF expr THEN statement ELSE statemen
다음 문법을 고려하십시오. 예를 들어 연산자 우선 순위와 관련된 문제가 있습니다. res = 2 * a + b는 res = 2 * (a + b)와 비슷한 구문 분석 트리를가집니다. 나는 문제가 어디 있는지 알고 있지만, 상호 왼쪽 재귀가없는 "아름다운"해결책은 내 마음에 온다. 좀 도와 주실 래요? 문법은 맞춤 방문자와 함께 사용됩니다. 우선, 왼쪽 재귀
ANTLR을 C#과 함께 사용하여 C와 유사한 구조체에 대한 간단한 파서를 만듭니다. 런타임 버전은 4.7입니다. 문법은 다음과 같습니다 structDef : STRUCT ID OPENBLOCK (fieldDef)+ CLOSEBLOCK ;
fieldDef : (namespaceQualifier)+ ID ID SEMICOLON ;
namespaceQual
나는이 질문이 많은 시간을 물어 왔다는 것을 알고있다. ANTLR을 사용하여 문법을 작성하려고합니다. Predicate : LOWERCASE | Predicate VarChars ;
VarChars : LOWERCASE | UPPERCASE;
fragment LOWERCASE : [a-z] ;
fragment UPPERCASE : [A-Z
I 렉스 다음 문법/문자열을 파싱 난 시점에서 걸려 모두 공백으로 토큰 화한다 있습니다 grammar MyItems;
theseItems : item (SPACE item)* ;
item : FIELDTEXT+ ;
SPACE : ' ' ;
FIELDTEXT : ~[' '] ;
를 입력으로 : V3 AGL V445
line 1:0 mismatc
동일한 단어와 일치하는 렉서 규칙이 여러 개인 antlr 문법이 있습니다. 렉싱 중에는 해결할 수 없지만 문법에서는 명확하지 않습니다. 예 : conversion: NUMBER UNIT CONVERT UNIT;
NUMBER: [0-9]+;
UNIT: 'in' | 'meters' | ......;
CONVERT: 'in';
입력 : "에서"1 in