나는 재귀 적으로 괜찮은 파싱에 대해 배우고 있으며 알고리즘이 작동하지 않는다고 생각하는 몇 가지 시나리오를 생각해 냈습니다. 그 중 하나는 다음과 같은 간단한 문법을 고려한 것입니다. S → E; E → id | id + id 문자열 id + id;은이 문법의 언어로 유효합니다. 그러나 재귀 적 강하 알고리즘을 실행하면 S에서 E으로 내려가 첫 번째로
주어진 BNF 문법을 사용하여 재귀 적으로 괜찮은 구문 분석 작업을하고있었습니다. 나는 C++에서 하나를 만들 수 있었지만 자바가별로 좋지 않아서 C++에서 코드를 미러하려했습니다. 지금까지 그것은하지만 첫 번째 문자열을 읽고 나에게 출력을 제공하는 것 a=a**b+ca=a+b-c*d
a=a\b
a=a^2
a=a**b++z
a=b
를 포함
구문 분석 및 의미 분석이 어떻게 작동하는지 궁금합니다. 필자는 통역사의 렉서 및 문법 구성을 마쳤습니다. 는 지금이 문법 예를 들어 에 대한 재귀 하강 (위에서 아래로) 파서를 구현하기 위하여려고하고있다, 나는 다음과 같은 문법이 : 자바 ( <declaration> ::= <data_type> <identifier> ASSIGN <value>
그래서
Slim와 같은 템플릿 언어 (ASP 용)를 .NET에서 컴파일하려면 C# 또는 F #이 더 적합합니까? (나에게 F#는 작업 과학 더 적절한 것 같다 ..),하는 중첩을 설명하는이 공간 증가 들여 쓰기는 언어 구문 분석에 적합 두 기술의 언어 선택, 이외에 있다/블록 (예 : Slim, Haml 또는 SCSS) : 재귀 하향식 구문 분석 또는 재귀 적 상
포인터에 관한 K & R C 초판 5 장 끝 부분을 읽었습니다. 나는 지금까지 모든 것을 이해했으며, 모든 것을 이해했다. 그러나 어떤 이유로 운동 5-18이 요구하는 것을 이해하기 위해 애 쓰고있다. "입력 오류로부터 dcl 복구" 소리가 충분히 간단하지만 얼마나 멀리 들리는 지 알 수있다. 내가 갈 것을 기대하는 질문? 그냥 누락 된 괄호, 줄 바꿈 부
: 약자로 type FieldValue = Seq[String] :+: String :+: Int :+: Long :+: CNil
type FieldLeaf = FieldValue :+: SubField :+: CNil
type SubField = Seq[Field]
type Field = (String, FieldLeaf)
을, 스칼라 컴파일러
글쎄, 나는 아래와 같이 문법을 구문 분석하기 위해 재귀 적 하강 구문 분석을 사용하여 함수를 작성해야하는지 잘 모르겠습니다. 사실, 난 ... BNF 내가 바로 그 일을하고 있는지 확실하지 않습니다 : A : B | A '!'
B : '[' ']'
의사 코드 : f()
{
if(tok is B)
parse_b();
r
AST를 방문자와 구문 분석 할 때 방문자가 범위를 변경하면 어떻게 감지 할 수 있습니까? 예를 들어 클래스 노드에있을 때 클래스 범위를 만들지 만 클래스 노드를 벗어날 때를 감지하여 범위를 닫는 방법은 무엇입니까? 1: Stmt_Class(
type: 0
extends: null
implements: array(
)
라텍스 구문을 조금 확장하고 싶습니다. 이 파싱 연습을 피할 수있는 순수한 라텍스 방법이 있습니다. 이 질문의 목적은 다음 구문 분석 문제를 해결하는 것입니다. If \ep is small --> If \epsilon is small
\theorem --> \begin{theorem}
(tab) lorem ipsum --> (