재귀 하강 파서의 일부에 대한 코드를 작성하는 방법은 무엇입니까?

user12875544

이 스택 오버플로 질문에 대한 답변을 찾고 있습니다. 누군가이 질문 이 나에게 물어 보려는 것을 안내해 줄 수 있습니까?

응답 한 사람이 설명하는대로 다음을 수행하도록 요청합니다.

두 개의 함수를 작성하십시오.

ifblock
logic_expr

선택한 언어로 된 재귀 하강 파서의 일부로.

<ifblock> --> if(<logic_expr>){<stmts>} [else {<stmts>}]
<logic_expr> --> <value> == <value> | <value> != <value>

다른 비 터미널 기호, 'stmts'및 'value'의 경우 동일한 이름으로 미리 작성된 함수의 존재를 가정 할 수 있습니다.

입력 스트림에서 다음 토큰을 얻으려면 터미널 기호에 대한 코드에 나열된대로 코드를 반환하는 'lex ()'를 호출 할 수 있습니다. 'lex ()'를 호출하여 토큰 코드를 요청하여 'ifblock'을 구현하고 언어 문법에 따라 필요한 토큰을 평가하고 일치시킵니다.

'if'의 논리식을 평가하려면 문법에 정의 된 논리식을 평가하기 위해 작성해야하는 'logic_expr'함수를 입력해야하며 비 말단 '값'이 있다고 가정 할 수 있습니다. 이미 존재합니다.

서지

대답은 다음과 같을 수 있습니다. 물론 이것은 문법 파서의 잘린 의사 코드 일 뿐이며 오류 처리 방식이나 AST 빌더가 많지 않습니다.

void parse() {
    while (!EOF)
       if (lex() == IF)
          ifblock()
       else // what is it?
}

void ifblock () {
    if (lex() != LP) 
       return_error;
    le = logic_expr();
    if (lex() != RP) 
       return_error;
    // parse statements in {}, optional else (if (lex() == ELSE) with {}
    // if no errors
    create_if_node(le, st, ...);
}

void logic_expr()
    v1 = value();
    op = lex();
    v2 = value();

    if (op == EQ)
       return create_eq_node(v1, v2);
    else if (op == NEQ)
       return create_neq_node(v1, v2);

    return_error();
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

재귀 함수에 대한 메서드 정의를 작성하는 방법은 무엇입니까?

분류에서Dev

MoonScript에서 재귀 함수를 작성하는 방법은 무엇입니까?

분류에서Dev

회문 소수에 대한 재귀 함수를 작성하는 방법은 무엇입니까?

분류에서Dev

F #에서 일반 재귀 확장 메서드를 작성하는 방법은 무엇입니까?

분류에서Dev

JFrame에서 기본 닫기 버튼에 대한 코드를 작성하는 방법은 무엇입니까?

분류에서Dev

Swift의 UIViewController에서 동일한 코드를 다시 작성하지 않는 방법은 무엇입니까?

분류에서Dev

기존 Windows 드라이버 코드에 대한 SOURCES 파일을 작성하는 방법은 무엇입니까?

분류에서Dev

Java에서 List <object> 재정의 추가 코드를 작성하는 방법은 무엇입니까?

분류에서Dev

Ruby에서 재귀 팩토리얼 함수를 작성하는 방법은 무엇입니까?

분류에서Dev

여러 파일 이름의 일부를 재귀 적으로 변경하는 방법은 무엇입니까?

분류에서Dev

bqplot에서 대화 형 플롯으로 재귀를 방지하는 방법은 무엇입니까?

분류에서Dev

재귀 방법에서 동일한 변수의 값을 확인하는 방법은 무엇입니까?

분류에서Dev

JSON 파일에 대한 설명 문서를 작성하는 방법은 무엇입니까?

분류에서Dev

JSON 파일에 대한 설명 문서를 작성하는 방법은 무엇입니까?

분류에서Dev

이 다중 스레드 상황에서 깨끗한 코드를 작성하는 방법은 무엇입니까?

분류에서Dev

PHP에서 URL 재 작성을 위해 htaccess 코드를 사용하는 방법은 무엇입니까?

분류에서Dev

PHP에서 일부 파일에 대한 액세스를 방지하는 방법은 무엇입니까?

분류에서Dev

r에서 문자열의 일부를 재정렬하고 대체하는 방법은 무엇입니까?

분류에서Dev

이 코드에 대한 RSpec 테스트 코드를 작성하는 방법은 무엇입니까?

분류에서Dev

json 문자열에 대한 일반 getObject () 메서드를 작성하는 방법은 무엇입니까?

분류에서Dev

클래스에 대한 일반적인 get 메서드를 작성하는 방법은 무엇입니까?

분류에서Dev

폴더를 건드리지 않고 파일에서 실행 권한을 재귀 적으로 제거하는 방법은 무엇입니까?

분류에서Dev

Vue의 재귀 구성 요소에서 활성 클래스를 전환하는 방법은 무엇입니까?

분류에서Dev

파일 및 디렉토리 복사에서 재귀를 방지하는 방법은 무엇입니까?

분류에서Dev

JavaScript에서 재귀 함수를 중지하는 방법은 무엇입니까?

분류에서Dev

Azure에서 앱의 일부를 작성하는 방법은 무엇입니까?

분류에서Dev

Netcdf C ++ | 단일 변수에 대한 레코드를 작성하는 방법은 무엇입니까?

분류에서Dev

Application_BeginRequest에서 웹 서버에 도달하는 첫 번째 요청에 대한 코드의 일부를 실행하는 방법은 무엇입니까?

분류에서Dev

자기 유사 XML 트리에 대한 재귀 XSD 스키마를 작성하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    재귀 함수에 대한 메서드 정의를 작성하는 방법은 무엇입니까?

  2. 2

    MoonScript에서 재귀 함수를 작성하는 방법은 무엇입니까?

  3. 3

    회문 소수에 대한 재귀 함수를 작성하는 방법은 무엇입니까?

  4. 4

    F #에서 일반 재귀 확장 메서드를 작성하는 방법은 무엇입니까?

  5. 5

    JFrame에서 기본 닫기 버튼에 대한 코드를 작성하는 방법은 무엇입니까?

  6. 6

    Swift의 UIViewController에서 동일한 코드를 다시 작성하지 않는 방법은 무엇입니까?

  7. 7

    기존 Windows 드라이버 코드에 대한 SOURCES 파일을 작성하는 방법은 무엇입니까?

  8. 8

    Java에서 List <object> 재정의 추가 코드를 작성하는 방법은 무엇입니까?

  9. 9

    Ruby에서 재귀 팩토리얼 함수를 작성하는 방법은 무엇입니까?

  10. 10

    여러 파일 이름의 일부를 재귀 적으로 변경하는 방법은 무엇입니까?

  11. 11

    bqplot에서 대화 형 플롯으로 재귀를 방지하는 방법은 무엇입니까?

  12. 12

    재귀 방법에서 동일한 변수의 값을 확인하는 방법은 무엇입니까?

  13. 13

    JSON 파일에 대한 설명 문서를 작성하는 방법은 무엇입니까?

  14. 14

    JSON 파일에 대한 설명 문서를 작성하는 방법은 무엇입니까?

  15. 15

    이 다중 스레드 상황에서 깨끗한 코드를 작성하는 방법은 무엇입니까?

  16. 16

    PHP에서 URL 재 작성을 위해 htaccess 코드를 사용하는 방법은 무엇입니까?

  17. 17

    PHP에서 일부 파일에 대한 액세스를 방지하는 방법은 무엇입니까?

  18. 18

    r에서 문자열의 일부를 재정렬하고 대체하는 방법은 무엇입니까?

  19. 19

    이 코드에 대한 RSpec 테스트 코드를 작성하는 방법은 무엇입니까?

  20. 20

    json 문자열에 대한 일반 getObject () 메서드를 작성하는 방법은 무엇입니까?

  21. 21

    클래스에 대한 일반적인 get 메서드를 작성하는 방법은 무엇입니까?

  22. 22

    폴더를 건드리지 않고 파일에서 실행 권한을 재귀 적으로 제거하는 방법은 무엇입니까?

  23. 23

    Vue의 재귀 구성 요소에서 활성 클래스를 전환하는 방법은 무엇입니까?

  24. 24

    파일 및 디렉토리 복사에서 재귀를 방지하는 방법은 무엇입니까?

  25. 25

    JavaScript에서 재귀 함수를 중지하는 방법은 무엇입니까?

  26. 26

    Azure에서 앱의 일부를 작성하는 방법은 무엇입니까?

  27. 27

    Netcdf C ++ | 단일 변수에 대한 레코드를 작성하는 방법은 무엇입니까?

  28. 28

    Application_BeginRequest에서 웹 서버에 도달하는 첫 번째 요청에 대한 코드의 일부를 실행하는 방법은 무엇입니까?

  29. 29

    자기 유사 XML 트리에 대한 재귀 XSD 스키마를 작성하는 방법은 무엇입니까?

뜨겁다태그

보관