나는 this tutorial을 따르고 있으며 자습서에서 사용한 4.5 대신 Antlr 4.7을 사용한다는 것을 제외하고는 동작을 복제했습니다.요소에 ANTLR에 의해 생성 된 파서로 구문 분석 된 특성을 포함 할 수 있습니까? 그렇다면 어떻게?
비용 추적자 용 DSL을 구축하려고합니다.
각 요소에 속성이있을 수 있는지 궁금한가요?
예. 이것은 요소가 또한 양 등 2 개 속성을 가질 것이다라고 의미 https://github.com/simkimsia/learn-antlr-web-js/blob/master/todo.g4
grammar todo;
elements
: (element|emptyLine)* EOF
;
element
: '*' (' ' | '\t')* CONTENT NL+
;
emptyLine
: NL
;
NL
: '\r' | '\n'
;
CONTENT
: [a-zA-Z0-9_][a-zA-Z0-9_ \t]*
;
에서 볼 수 있듯이 이것은 todo.g4에 대한 코드가
지금 모습입니다 수취인. 간단하게하기 위해 동일한 구문을 사용하여 구문 분석을보다 쉽게 수행 할 수 있습니다.
포맷은 예 pay Acme Corp 123,789.45
이다 pay [payee] [amount]
될 것이다하기 때문에 수취인은 파브 사이며 센트
다른 예의 교의 양을 나타 내기 위해 정수로 표현 된 양 12,378,945이고 pay Banana Inc 700
이므로 수취인은 Banana Inc이고 금액은 70000이며 금액으로 나타내는 단위는 천 단위입니다. 센트
나는 todo.g4를 변경하고 파서를 다시 생성해야한다고 생각한다.
요소에 다른 속성이 있습니까? 그렇다면 어떻게 시작해야합니까?
UPDATE
이 상단에 최신 업데이트를 위 내 최신 시도입니다 :
난 그냥 GRUN 및 testRig을 사용하는 방법을 알아 냈어. 그 팁에 @Raven 감사합니다.
최신 시도 : 내 최신 expense.g4
grammar expense;
payments: (payment NL)* ;
payment: PAY receiver amount=NUMBER ;
receiver: surname=ID (lastname=ID)? ;
PAY: 'pay' ;
NUMBER: ([0-9]+(','[0-9]+)*)('.'[0-9]*)?;
ID: [a-zA-Z0-9_]+ ;
NL: '\n' | '\r\n' ;
WS: [\t ]+ -> skip ;
이전 시도 (이전 시도에서 유일한 차이는 지불을위한 정규식) : 이것은 내 비용입니다.G4
grammar expense;
payments: (payment NL)* ;
payment: PAY receiver amount=NUMBER ;
receiver: surname=ID (lastname=ID)? ;
PAY: 'pay' ;
NUMBER: [0-9]+ (',' [0-9]+)+ ('.' [0-9]+)? ;
ID: [a-zA-Z0-9_]+ ;
NL: '\n' | '\r\n' ;
WS: [\t ]+ -> skip ;
내가 모든 코드를 이해하지만, 오타에 독수리 눈을 가지고 있지 않습니다. 56 행 :'var 토큰 = 새로운 새로운 antlr4.CommonTokenStream (expenseLexer); -> 두 번, 새로운 오류의 원인. – BernardK
@BernardK 감사합니다. 나는 새로운 것을 제거하고 Raven이 제안한 지불 기능을 사용했다. 나는 console.log에 시도했을 때 여전히 빈 배열을 보았습니다. –