Skip to content

Instantly share code, notes, and snippets.

@sftblw
Last active November 2, 2016 11:32
Show Gist options
  • Select an option

  • Save sftblw/de0ac03c71a1c35e67a8518b0fc84613 to your computer and use it in GitHub Desktop.

Select an option

Save sftblw/de0ac03c71a1c35e67a8518b0fc84613 to your computer and use it in GitHub Desktop.
GNE.g4 (학습이 더 필요) - 언어 GNE의 ANTLR 4 PGS용 문법 만들다 만 거
grammar GNE;
// parse rules
//// program
program
: statement*
;
//// statement
statement
: blockStatement
| functionStatement
| traceStatement
| importStatement
| exportStatement
| varStatement
| exceptionStatement
| expressionStatement
;
blockStatement
: '{' statement* '}'
;
functionStatement
: K_Identifier '.'
;
traceStatement
: '우리의 목표는, 진행하는 것 그것으로' '.'
;
importStatement
: Import Identifier '.'
;
exportStatement
: Export Identifier '.'
;
varStatement
: Var Identifier '.'
;
expressionStatement
: expression '.'
;
exceptionStatement
: Try statement Catch statement
;
//// expression
expression
: expression ( '+' | '더하기') expression # additiveExpression
| '우리의' expression Josa expression '이것이다' # assignmentExpression
| New Identifier # newExpression
| expression '(' formalParameter (',' formalParameter)? ')' # callExpression
| literal # literalExpression
| Identifier # identifierExpression
;
formalParameter
: Identifier
;
//// lexical rules
literal
: BooleanLiteral
| StringLiteral
| NumericLiteral
;
BooleanLiteral
: True
| False
;
StringLiteral
: '"' [ㄱ-힣]+ '"'
| '\'' [ㄱ-힣]+ '\''
;
NumericLiteral
: [0-9]+ ('.' [0-9]+)?
;
// scanner rules
Josa
: '은,'
| '는,'
;
StatementEnd: '.';
True : '친박';
False: '비박';
Var: '공천';
Import: '입당';
Export: '출당';
New: '창조';
Try: '코드 텅텅 빌때까지 한번 해 보세요';
Catch: '예외처리 다 어디 갔냐고';
Identifier
: [ㄱ-힣]+ // 은, 는, 부분까지 매칭되는 문제 있음 (현재 지식으로 해결 불가)
| K_Identifier
;
K_Identifier
: 'K-' Identifier
;
MultilineComment: '/ㄹ' .*? 'ㄹ/' -> channel(HIDDEN);
WhiteSpaces: [\t\r\n ]+ -> channel(HIDDEN);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment