매우 간단한 규칙 언어에 대한 공식 사양을 만들고 있는데, 매우 간단합니다. EBNF를 표준으로 사용하고 싶지만 조작 순서를 지정하는 방법을 알 수 없습니다. 지금까지는 스펙이 있습니다.Extended Backus-Naur Form 작업 순서
rule = statement, { (‘AND’|’OR’), statement};
variable = ‘$’,alphabetic character, {alphabetic character | digit};
statement = variable, [ ‘count’,[white space ],’>’,[white space],number ];
alphabetic character = "A" | "B" | "C" | "D" | "E" | "F" | "G"
| "H" | "I" | "J" | "K" | "L" | "M" | "N"
| "O" | "P" | "Q" | "R" | "S" | "T" | "U"
| "V" | "W" | "X" | "Y" | "Z" ;
number = [ "-" ] , digit , { digit } ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
white space = ? white space characters ? ;
내가 가지고있는 질문은 어떻게 괄호 안의 것들이 먼저 평가되어야 하는지를 어떻게 보여줄 것인가입니다. 이
$strap AND ($greenSticker count > 5 OR ($greenSticker AND $redSticker))
같은 그래서 뭔가는 대부분의 언어에 대한 공통 기능처럼 보이지만, 내 Google 기술은 나에게 실패와 나는 예를 찾을 수 없습니다. 당신이 볼 수 있듯이, 낮은 우선 순위 (+
및 -
)와 운영자가보다 일반적인 우선 순위가 높은 사업자보다는 규칙 (*
및 /
에
expression -> (+|-|ε) term ((+|-) term)*
term -> factor ((*|/) factor)*
factor -> var | number | (expression)
있습니다 간단한 예를 들어, LL 문법으로이 주어
문법 규칙에서 우선 순위를 표현할 때 왜 하향식 분석과 상향식 구문 분석을 구분하는지 알 수 없습니다. 앞에서 말했듯이 올바른 파스 트리를 만드는 것이 전부입니다. 결과적으로 동일한 결과를 얻으려면 하향식 또는 상향식으로 구성하십시오. 물론 이것은 몇 가지 함의를 지니지 만 파싱 기술을 (이런 종류의) 우선 순위와 관련시키는 방법은 분명하지 않습니다. 설명 해주십시오. – Gunther
그 표현 문법은 상향식 파서에서도 작동하며, 재귀 형 파서 에서뿐만 아니라 하향식 LL 파서에서도 작동합니다. 프랫 파서는 재귀 - 하강 및 하향식입니다. 두 번째 단락은 실제로 나에게 의미가 없습니다. – EJP
두 가지 문제를 해결하기 위해 혼란스러운 단락을 제거했습니다. 나머지 대답이 도움이되기를 바랍니다. –