2017-11-05 18 views
-1

저는이 EBNF 문법을 읽는 데 도움이 필요했습니다. 나는 그것에 익숙하지 않고 특히 처음에는 이해하지 못합니다. 두 번째 것을 이해하지만 첫 번째 문법과 어떻게 관련되어 있는지 이해하지 못합니다. .EBNF 문법 읽기

기간 :: = 차 {(T_STAR | T_SLASH) 기간}

차 :: = T_ICONST | T_SCONST | T_ID | T_LPAREN EXPR T_RPAREN는

EBNF에서
+0

[http://matt.might.net/articles/grammars-bnf-ebnf/]보세요. 설명은 간단하고 간단합니다. 최상위 규칙은 기호 "Term"이 기호 "Primary"로 변환되고 그 다음에 중괄호 안에있는 기호가 0 번 이상 반복됨을 의미합니다. – jrook

+0

그래서 용어가 유사 할 것입니다. "용어는 ​​다음과 같이 정의됩니다. (초등의 모든 것) {(T_STAR | T_SLASH) 용어}"이제 두 번째 용어는 무엇을 의미합니까? – McDodger

+0

'Term'은 * right *쪽으로 갈 수 있습니다. 그것은 정의보다는 오히려 전환이다. 두 번째 규칙은'Primary '기호가 규칙의 오른쪽에있는'|'로 구분 된 기호 중 하나로 변환 될 수 있음을 의미합니다. – jrook

답변

-1

, 그래서 우리는이 EBNF에 따라 몇 가지 코드를 생성 할 수 있습니다 생략하거나 더 많은 시간 를 반복 할 수 컬 괄호로 둘러싸인 표현은

("/"에 대한 그 T_STAR 나타내는 문자 "*"및 T_SLASH을 가정 할 수 있습니다)
// Term ::= Primary { (T_STAR|T_SLASH) Term } 
// Primary ::= T_ICONST | T_SCONST | T_ID | T_LPAREN Expr T_RPAREN 
Term ::= Primary * Term 
Term ::= Primary * Primary/Term 
Term ::= Primary * Primary/Primary 
Term ::= ThisIsT_ID * ThisIsT_ID/ThisIsT_ID