{"slug":"tu-parser-den-doi-sanh-phan-tich-ngu-phap-tu-nhien-va-khoa-hoc-may-tinh","title":"Từ Parser đến 层次分析: Đối sánh phân tích ngữ pháp tự nhiên và khoa học máy tính","summary":"Từ Parser đến 层次分析: Đối sánh phân tích ngữ pháp tự nhiên và khoa học máy tính Phân tích ngôn ngữ tự nhiên và phân tích mã nguồn đều phải giải quyết một vấn đề cơ bản: từ một chuỗi đơn vị tuyến tính,...","excerpt":"Từ Parser đến 层次分析: Đối sánh phân tích ngữ pháp tự nhiên và khoa học máy tính Phân tích ngôn ngữ tự nhiên và phân tích mã nguồn đều phải giải quyết một vấn đề cơ bản: từ một chuỗi đơn vị tuyến tính,...","markdown":"# Từ Parser đến 层次分析: Đối sánh phân tích ngữ pháp tự nhiên và khoa học máy tính\n\nPhân tích ngôn ngữ tự nhiên và phân tích mã nguồn đều phải giải quyết một vấn đề cơ bản: từ một chuỗi đơn vị tuyến tính, xác định cấu trúc và quan hệ giữa các đơn vị đó.\n\nTrong khoa học máy tính, quá trình này được hình thức hóa bằng các khái niệm như **Lexer (bộ phân tích từ vựng)**, **Token (đơn vị từ vựng)**, **Parser (bộ phân tích cú pháp)** và **Semantic Analysis (phân tích ngữ nghĩa)**.\n\nTrong ngôn ngữ học, các khái niệm tương ứng gồm **词法分析 (phân tích từ vựng)**, **词类 (từ loại)**, **句法分析 (phân tích cú pháp)**, **层次分析 (phân tích tầng bậc)** và **语义分析 (phân tích ngữ nghĩa)**.\n\nHai hệ thống không đồng nhất. Việc đối sánh chỉ nhằm làm rõ các tầng khác nhau của quá trình phân tích.\n\nKhoa học máy tính                 Ngôn ngữ tự nhiên\n\nSource Code                      语言材料\n↓                                ↓\nLexical Analysis                 词法分析\n↓                                ↓\nTokens                           词 / 词类\n↓                                ↓\nParsing                          句法分析\n↓                                ↓\nParse Tree / AST                 层次结构\n↓                                ↓\nSemantic Analysis               语义分析\n\n\nQuan hệ giữa hai hệ thống nên được hiểu là **tương đồng về phương pháp phân tích**, không phải quan hệ tương đương tuyệt đối.\n\n\n\n## 1. Từ chuỗi tuyến tính đến cấu trúc\n\nMã nguồn và ngôn ngữ tự nhiên đều xuất hiện dưới dạng chuỗi tuyến tính.\n\nMã nguồn:\n\na + b * c\n\n\nNgôn ngữ tự nhiên:\n\n我 喜欢 学习 汉语\n\n\nThông tin tuyến tính chỉ cho biết thứ tự:\n\nA → B → C → D\n\n\nNó chưa trực tiếp biểu diễn:\n\nđơn vị nào kết hợp với đơn vị nào;\nthành phần nào tạo thành một cấu trúc;\ncấu trúc nào nằm trong cấu trúc lớn hơn;\nquan hệ giữa các thành phần là gì.\n\nPhân tích vì vậy phải chuyển từ **linear sequence (chuỗi tuyến tính)** sang **hierarchical structure (cấu trúc tầng bậc)**.\n\nLinear Sequence\n↓\nHierarchical Structure\n\n\nĐây là điểm tương đồng cơ bản giữa parsing trong khoa học máy tính và 层次分析 trong phân tích ngữ pháp.\n\n\n\n## 2. Lexer và 词法分析: nhận diện đơn vị\n\nTrong compiler, Lexical Analysis nhận một chuỗi ký tự và phân chia nó thành các Token.\n\nCharacters\n↓\nLexical Analysis\n↓\nTokens\n\n\nVí dụ:\n\nvalue + 10\n\n\ncó thể được phân tích thành:\n\nIDENTIFIER(\"value\")\nPLUS(\"+\")\nINTEGER(10)\n\n\nTrong phân tích ngôn ngữ tự nhiên, 词法分析 cũng phải xác định các đơn vị từ vựng và thuộc tính của chúng.\n\nVí dụ:\n\n我喜欢学习汉语\n\n\ncó thể được phân chia:\n\n我 / 喜欢 / 学习 / 汉语\n\n\nvà xác định 词类:\n\n我       代词\n喜欢     动词\n学习     动词\n汉语     名词\n\n\nCó thể đối sánh ở mức phương pháp:\n\nLexical Analysis  ≈  词法分析\nToken             ≈  词法单位\nToken Category    ≈  词类\n\n\nDấu `≈` biểu thị sự tương đồng phục vụ phân tích, không biểu thị hai khái niệm hoàn toàn đồng nhất.\n\n\n\n## 3. Token và 词类 không xác định toàn bộ cấu trúc\n\nBiết loại của từng Token chưa đủ để xác định cấu trúc của chương trình.\n\nTương tự, biết 词类 của từng từ chưa đủ để xác định cấu trúc của câu.\n\nMột chuỗi:\n\nNoun + Verb + Noun\n\n\nchỉ mô tả một **Pattern (mẫu cấu trúc)** trên bề mặt.\n\nNó chưa tự xác định:\n\nNoun\n├── ?\nVerb\n├── ?\nNoun\n\n\ncũng chưa xác định quan hệ ngữ nghĩa giữa ba đơn vị.\n\nTrong ngôn ngữ tự nhiên, cùng một từ còn có thể thuộc nhiều từ loại hoặc có chức năng khác nhau tùy môi trường sử dụng. Việc xác định từ loại vì vậy cũng có thể phụ thuộc vào cấu trúc lớn hơn.\n\nPhân loại đơn vị là điều kiện cần cho phân tích, nhưng không phải kết quả cuối cùng của phân tích.\n\n\n\n## 4. Parser và 句法分析: xác định cấu trúc\n\nTrong khoa học máy tính, Parser sử dụng Grammar để xác định cách các Token kết hợp thành cấu trúc.\n\nTokens\n↓\nParser\n↓\nSyntactic Structure\n\n\nTrong ngôn ngữ học, 句法分析 xác định quan hệ cấu trúc giữa các đơn vị của câu.\n\n词\n↓\n句法分析\n↓\n句法结构\n\n\nCó thể đối sánh:\n\nParser / Parsing  ≈  句法分析\n\n\nĐiểm chung nằm ở câu hỏi:\n\nCác đơn vị đang đứng cạnh nhau được tổ chức thành cấu trúc như thế nào?\n\nMột chuỗi tuyến tính không tự cung cấp câu trả lời cho câu hỏi này. Phân tích cú pháp phải xác định ranh giới và quan hệ giữa các thành phần.\n\n\n\n## 5. Parse Tree và 层次分析: biểu diễn quan hệ tầng bậc\n\n**Parse Tree (cây phân tích cú pháp)** biểu diễn cấu trúc tầng bậc được Parser xác định.\n\nTrong phân tích ngôn ngữ tự nhiên, 层次分析 cũng phân chia một cấu trúc lớn thành các thành phần trực tiếp, sau đó tiếp tục phân tích các thành phần nhỏ hơn.\n\nMô hình tổng quát:\n\nStructure\n/       \\\nUnit A     Structure\n/      \\\nUnit B    Unit C\n\n\nĐiều quan trọng không nằm ở hình dạng của cây, mà ở thông tin mà cây biểu diễn:\n\nA + B + C\n\n\nkhông nhất thiết có cấu trúc:\n\n(A + B) + C\n\n\nmà cũng có thể là:\n\nA + (B + C)\n\n\nHai cách phân tầng tạo ra hai cấu trúc khác nhau.\n\nCó thể đối sánh:\n\nParse Tree        ≈  层次结构的形式表示\nParsing           ≈  层次关系的识别\n\n\nTuy nhiên, 层次分析 không phải AST của ngôn ngữ tự nhiên. Hai khái niệm chỉ cùng chia sẻ nguyên tắc biểu diễn cấu trúc theo tầng bậc.\n\n\n\n## 6. AST và sự trừu tượng hóa cấu trúc\n\n**Abstract Syntax Tree – AST (cây cú pháp trừu tượng)** giữ lại những quan hệ cấu trúc cần thiết và loại bỏ một phần chi tiết hình thức.\n\nVí dụ:\n\na + b * c\n\n\ncó thể được biểu diễn:\n\nAdd\n├── a\n└── Multiply\n├── b\n└── c\n\n\nGiá trị của AST nằm ở việc biến một chuỗi tuyến tính thành một mô hình có quan hệ rõ ràng.\n\nTrong phân tích ngôn ngữ tự nhiên cũng có nhu cầu tương tự. Một câu không chỉ được mô tả bằng thứ tự từ mà còn bằng cấu trúc và quan hệ giữa các thành phần.\n\nVì vậy, AST có thể được sử dụng như một **phép đối chiếu về phương pháp biểu diễn**, nhưng không phải một mô hình tương đương hoàn toàn với cấu trúc cú pháp của ngôn ngữ tự nhiên.\n\n\n\n## 7. Grammar Rule và 语法规则\n\nTrong khoa học máy tính, **Grammar Rule (quy tắc ngữ pháp hình thức)** xác định những cấu trúc mà Parser được phép xây dựng.\n\nVí dụ:\n\nExpression → Expression + Expression\n\n\ncho phép hai Expression kết hợp thông qua toán tử `+`.\n\nTrong ngôn ngữ học, **语法规则 (quy tắc ngữ pháp)** cũng mô tả cách các đơn vị có thể kết hợp và đảm nhiệm chức năng trong cấu trúc lớn hơn.\n\nHai loại rule có thể được đối sánh ở chức năng mô hình hóa:\n\nGrammar Rule  ≈  语法规则\n\n\nNhưng nguồn gốc của chúng khác nhau.\n\nTrong một programming language:\n\nSpecification\n↓\nGrammar\n↓\nValid Structure\n\n\nTrong nghiên cứu natural language:\n\nLanguage Data\n↓\nObservation\n↓\nGeneralization\n↓\nGrammatical Description\n\n\nGrammar của ngôn ngữ lập trình thường là một bộ phận của specification. Grammar mô tả của ngôn ngữ tự nhiên chủ yếu là mô hình được xây dựng từ dữ liệu ngôn ngữ.\n\n\n\n## 8. Pattern không phải Grammar Rule\n\n**Pattern (mẫu cấu trúc)** là một dạng hình thức có thể quan sát được trong dữ liệu.\n\nVí dụ tổng quát:\n\nA + B + C\n\n\nchỉ cho biết ba thành phần xuất hiện theo một thứ tự nhất định.\n\nNếu nhiều trường hợp có dạng tương tự, người phân tích có thể đặt giả thuyết rằng chúng tuân theo cùng một cấu trúc:\n\nA + [B + C]\n\n\nTuy nhiên, Pattern không tự chứng minh giả thuyết đó.\n\nCần phân biệt:\n\nObserved Pattern\n↓\nStructural Hypothesis\n\n\nvới:\n\nObserved Pattern\n≠\nProven Structure\n\n\nTrong khoa học máy tính, Parser có thể dựa trên một Grammar đã được xác định trước.\n\nTrong nghiên cứu ngôn ngữ tự nhiên, chính Grammar thường là kết quả cần được mô tả hoặc kiểm chứng từ dữ liệu.\n\nĐây là một khác biệt phương pháp luận quan trọng giữa hai lĩnh vực.\n\n\n\n## 9. Candidate Structure: cấu trúc cần được kiểm tra\n\nTừ một Pattern có thể hình thành một hoặc nhiều **Candidate Structure (cấu trúc ứng viên)**.\n\nVí dụ một chuỗi:\n\nA B C\n\n\ncó thể có các Candidate Structure:\n\n[A B] C\n\n\nhoặc:\n\nA [B C]\n\n\nThậm chí một số hệ thống phân tích còn có thể đưa ra những quan hệ không thể biểu diễn đầy đủ chỉ bằng hai cách chia trên.\n\nDo đó:\n\nSurface Pattern\n↓\nCandidate Structures\n↓\nAnalysis\n\n\nViệc một Candidate Structure có thể được vẽ thành cây chỉ chứng minh rằng **ta đã xây dựng được một mô hình cấu trúc**.\n\nNó chưa chứng minh mô hình đó phản ánh đúng các quan hệ trong dữ liệu ngôn ngữ.\n\n\n\n## 10. Syntactic Ambiguity và 句法歧义\n\n**Syntactic Ambiguity (mơ hồ cú pháp)** xuất hiện khi một biểu thức có thể được phân tích thành nhiều cấu trúc cú pháp.\n\nTrong tiếng Trung, thuật ngữ tương ứng là **句法歧义 (mơ hồ cú pháp)**.\n\nMô hình tổng quát:\n\nInput\n├── Parse A\n└── Parse B\n\n\nHai cách parse có thể sử dụng cùng:\n\ntừ;\nthứ tự từ;\ntừ loại;\n\nnhưng tạo ra các quan hệ cấu trúc khác nhau.\n\nDo đó:\n\nSame Tokens\n≠\nSame Structure\n\n\nvà:\n\nSame Surface Pattern\n≠\nUnique Analysis\n\n\n层次分析 có vai trò xác định các khả năng cấu trúc này. Tuy nhiên, cấu trúc cú pháp chưa phải tầng cuối cùng của quá trình phân tích.\n\n\n\n## 11. Semantic Analysis và 语义分析\n\nTrong compiler, Semantic Analysis kiểm tra các điều kiện mà Parser không thể xác nhận chỉ bằng cấu trúc cú pháp.\n\nVí dụ:\n\n\"hello\" - 5\n\n\ncó thể tạo được cấu trúc:\n\nSubtract\n├── String\n└── Integer\n\n\nnhưng vẫn bị bác bỏ nếu toán tử `-` không được định nghĩa cho `String`.\n\nTrong ngôn ngữ học, **语义分析 (phân tích ngữ nghĩa)** cũng kiểm tra thông tin mà cấu trúc hình thức đơn thuần chưa thể biểu đạt đầy đủ.\n\nMột phân tích cú pháp phải được đối chiếu với các câu hỏi như:\n\nthành phần nào mô tả thành phần nào;\nhành động liên hệ với đối tượng nào;\nthuộc tính được gán cho thực thể nào;\ncác thành phần có tương thích về nghĩa hay không;\ncách phân tầng có bảo toàn cách hiểu của câu hay không.\n\nCó thể đối sánh ở mức phương pháp:\n\nSemantic Analysis  ≈  语义关系与语义限制的分析\n\n\n\n\n## 12. Semantic Relations và 语义关系\n\n**Semantic Relations (quan hệ ngữ nghĩa)** mô tả quan hệ về nghĩa giữa các thành phần trong một cấu trúc. Trong tiếng Trung có thể gọi là **语义关系 (quan hệ ngữ nghĩa)**.\n\nMột cấu trúc cú pháp không chỉ cần xác định:\n\nA kết hợp với B\n\n\nmà còn cần giải thích:\n\nA có quan hệ gì với B?\n\n\nHai cây có hình thức hợp lệ có thể biểu diễn hai quan hệ khác nhau.\n\nVì vậy, phân tích ngữ pháp không chỉ là bài toán:\n\nWords\n↓\nTree\n\n\nmà còn bao gồm:\n\nWords\n↓\nStructure\n↓\nRelations\n\n\nCây là phương tiện biểu diễn cấu trúc, không phải bằng chứng độc lập cho tính đúng đắn của cấu trúc đó.\n\n\n\n## 13. Semantic Constraints và 语义限制\n\nTrong khoa học máy tính, một node có thể đứng ở vị trí hợp lệ về syntax nhưng không đáp ứng semantic constraint.\n\nVí dụ:\n\nSubtract\n├── String\n└── Integer\n\n\ncó hình dạng cú pháp hợp lệ nhưng có thể vi phạm yêu cầu về type.\n\nTrong ngôn ngữ tự nhiên cũng tồn tại **语义限制 (ràng buộc ngữ nghĩa)** đối với sự kết hợp giữa các thành phần.\n\nMột Predicate có thể yêu cầu đối tượng mà nó mô tả phải có một số đặc tính ngữ nghĩa nhất định. Một Verb cũng có thể đặt điều kiện đối với các thành phần tham gia vào quan hệ mà nó biểu thị.\n\nCó thể mô hình hóa:\n\nSyntactic Position\n↓\nSemantic Requirement\n↓\nCompatible / Incompatible\n\n\nPhép đối sánh này không có nghĩa semantic constraint của compiler và 语义限制 của natural language là cùng một cơ chế. Điểm chung nằm ở nguyên tắc:\n\n**Khả năng xuất hiện trong một cấu trúc hình thức không tự động bảo đảm tính tương thích về ngữ nghĩa.**\n\n\n\n## 14. Vì sao Pattern không đủ để xác nhận một phân tích?\n\nPattern chỉ cung cấp bằng chứng về hình thức.\n\nGiả sử quan sát được:\n\nA + B + C\n\n\nMột cách phân tích đề xuất:\n\nA + [B + C]\n\n\nĐể chấp nhận cấu trúc này, ít nhất phải xác định được:\n\n1. B và C có tạo thành một constituent hay không?\n2. Rule nào cho phép cấu trúc đó?\n3. B và C có quan hệ cú pháp gì?\n4. B và C có quan hệ ngữ nghĩa gì?\n5. Cấu trúc này có bảo toàn interpretation của toàn biểu thức hay không?\n\n\nDo đó:\n\nPattern Match\n↓\nCandidate Structure\n↓\nSyntactic Analysis\n↓\nSemantic Analysis\n\n\nkhác với:\n\nPattern Match\n↓\nConclusion\n\n\nMột nhãn ngữ pháp cũng không thể tự chứng minh cấu trúc mà nhãn đó giả định. Cấu trúc phải được xác lập bằng quan hệ giữa các thành phần.\n\n\n\n## 15. Pattern + Structure + Semantics\n\nMột mô hình phân tích đầy đủ hơn có thể biểu diễn:\n\nForm\n↓\nPattern\n↓\nCandidate Structure\n↓\nSyntactic Relations\n↓\nSemantic Relations\n↓\nInterpretation\n\n\nMỗi tầng trả lời một câu hỏi khác nhau.\n\n**Form (hình thức)**:\n\nNhững đơn vị nào xuất hiện?\n\n**Pattern (mẫu cấu trúc)**:\n\nChúng có hình thức phân bố như thế nào?\n\n**Structure (cấu trúc)**:\n\nChúng được tổ chức theo tầng bậc nào?\n\n**Syntactic Relations (quan hệ cú pháp)**:\n\nCác thành phần có chức năng và quan hệ cú pháp gì?\n\n**Semantic Relations**:\n\nCác thành phần liên hệ với nhau về nghĩa như thế nào?\n\n**Interpretation (cách hiểu)**:\n\nToàn bộ cấu trúc được hiểu như thế nào trong ngữ cảnh?\n\nKhông tầng nào có thể được suy ra hoàn toàn chỉ từ tên gọi của tầng trước.\n\n\n\n## 16. Bảng đối sánh\n\nCác khái niệm chính có thể được tổng hợp như sau:\n\n| Khoa học máy tính | Phân tích ngôn ngữ | Điểm đối sánh |\n|---|---|---|\n| Source Code (mã nguồn) | 语言材料 (ngữ liệu) | Dữ liệu đầu vào |\n| Lexical Analysis (phân tích từ vựng) | 词法分析 (phân tích từ vựng) | Nhận diện đơn vị |\n| Token (đơn vị từ vựng) | 词 / 词法单位 (từ / đơn vị từ vựng) | Đơn vị được phân tích |\n| Token Category (loại token) | 词类 (từ loại) | Phân loại đơn vị |\n| Parser (bộ phân tích cú pháp) | 句法分析 (phân tích cú pháp) | Xác định cấu trúc |\n| Parse Tree (cây phân tích cú pháp) | 层次结构 (cấu trúc tầng bậc) | Biểu diễn quan hệ tầng bậc |\n| AST (cây cú pháp trừu tượng) | Mô hình cấu trúc trừu tượng | Lược bỏ chi tiết không cần thiết |\n| Grammar Rule (quy tắc ngữ pháp hình thức) | 语法规则 (quy tắc ngữ pháp) | Mô tả khả năng kết hợp |\n| Syntactic Ambiguity (mơ hồ cú pháp) | 句法歧义 (mơ hồ cú pháp) | Nhiều cấu trúc cho cùng biểu thức |\n| Semantic Analysis (phân tích ngữ nghĩa) | 语义分析 (phân tích ngữ nghĩa) | Kiểm tra quan hệ về nghĩa |\n| Semantic Constraint (ràng buộc ngữ nghĩa) | 语义限制 (ràng buộc ngữ nghĩa) | Điều kiện đối với sự kết hợp |\n\nCác cặp trong bảng là **đối sánh phương pháp**, không phải định nghĩa tương đương.\n\n\n\n## 17. Giới hạn của phép đối sánh\n\nProgramming language là hệ thống được thiết kế. Natural language là hệ thống hình thành và biến đổi trong quá trình sử dụng của cộng đồng ngôn ngữ.\n\nCompiler thường có thể hỏi:\n\nCấu trúc này có phù hợp với specification không?\n\n\nNgôn ngữ học thường phải hỏi:\n\nDữ liệu này cho thấy hệ thống đang vận hành như thế nào?\n\n\nVì vậy, trong khoa học máy tính:\n\nGrammar\n↓\nParser\n↓\nAccepted / Rejected\n\n\nTrong nghiên cứu ngôn ngữ tự nhiên, quan hệ thường phức tạp hơn:\n\nData\n↓\nPossible Analysis\n↓\nComparison\n↓\nGeneralization\n↓\nGrammatical Model\n\n\nNgữ pháp mô tả không phải mã nguồn của ngôn ngữ tự nhiên. Nó là mô hình được xây dựng để giải thích dữ liệu ngôn ngữ.\n\nPhép đối sánh với compiler có giá trị ở **phương pháp phân tầng vấn đề**, không phải ở việc đồng nhất hai hệ thống.\n\n\n\n## 18. Tổng kết: Form → Pattern → Structure → Semantics\n\nPhân tích một biểu thức không kết thúc ở việc nhận ra một Pattern.\n\nMô hình tổng quát là:\n\nForm\n↓\nPattern\n↓\nCandidate Structure\n↓\nSyntactic Relations\n↓\nSemantic Relations\n↓\nInterpretation\n\n\nTừ góc nhìn này, có thể thiết lập ba nguyên tắc:\n\nPattern ≠ Structure\nStructure ≠ Semantic Validity\nPossible Analysis ≠ Established Analysis\n\n\nMột Pattern cung cấp cơ sở để đề xuất cấu trúc. Cấu trúc phải được kiểm tra bằng quan hệ cú pháp. Quan hệ cú pháp tiếp tục phải được đối chiếu với quan hệ và ràng buộc ngữ nghĩa.\n\nĐây là điểm giao nhau quan trọng nhất giữa phương pháp phân tích của compiler và phương pháp phân tích ngữ pháp tự nhiên.\n\nBài tiếp theo sẽ áp dụng khung phân tích này vào một vấn đề cụ thể của ngữ pháp tiếng Hán: **主谓谓语句 (câu có vị ngữ chủ-vị)** — cách xác định cấu trúc, phạm vi của thuật ngữ và những cách phân tích khác nhau trong nghiên cứu ngữ pháp hiện đại.","html":"<h1>Từ Parser đến 层次分析: Đối sánh phân tích ngữ pháp tự nhiên và khoa học máy tính</h1><p>Phân tích ngôn ngữ tự nhiên và phân tích mã nguồn đều phải giải quyết một vấn đề cơ bản: từ một chuỗi đơn vị tuyến tính, xác định cấu trúc và quan hệ giữa các đơn vị đó.</p><p>Trong khoa học máy tính, quá trình này được hình thức hóa bằng các khái niệm như <strong>Lexer (bộ phân tích từ vựng)</strong>, <strong>Token (đơn vị từ vựng)</strong>, <strong>Parser (bộ phân tích cú pháp)</strong> và <strong>Semantic Analysis (phân tích ngữ nghĩa)</strong>.</p><p>Trong ngôn ngữ học, các khái niệm tương ứng gồm <strong>词法分析 (phân tích từ vựng)</strong>, <strong>词类 (từ loại)</strong>, <strong>句法分析 (phân tích cú pháp)</strong>, <strong>层次分析 (phân tích tầng bậc)</strong> và <strong>语义分析 (phân tích ngữ nghĩa)</strong>.</p><p>Hai hệ thống không đồng nhất. Việc đối sánh chỉ nhằm làm rõ các tầng khác nhau của quá trình phân tích.</p><pre><code class=\"language-text\">Khoa học máy tính                 Ngôn ngữ tự nhiên</code></pre><pre><code class=\"language-text\">Source Code                      语言材料</code></pre><pre><code class=\"language-text\">    ↓                                ↓</code></pre><pre><code class=\"language-text\">Lexical Analysis                 词法分析</code></pre><pre><code class=\"language-text\">    ↓                                ↓</code></pre><pre><code class=\"language-text\">Tokens                           词 / 词类</code></pre><pre><code class=\"language-text\">    ↓                                ↓</code></pre><pre><code class=\"language-text\">Parsing                          句法分析</code></pre><pre><code class=\"language-text\">    ↓                                ↓</code></pre><pre><code class=\"language-text\">Parse Tree / AST                 层次结构</code></pre><pre><code class=\"language-text\">    ↓                                ↓</code></pre><pre><code class=\"language-text\">Semantic Analysis               语义分析</code></pre><p>Quan hệ giữa hai hệ thống nên được hiểu là <strong>tương đồng về phương pháp phân tích</strong>, không phải quan hệ tương đương tuyệt đối.</p><h2>1. Từ chuỗi tuyến tính đến cấu trúc</h2><p>Mã nguồn và ngôn ngữ tự nhiên đều xuất hiện dưới dạng chuỗi tuyến tính.</p><p>Mã nguồn:</p><pre><code class=\"language-text\">a + b * c</code></pre><p>Ngôn ngữ tự nhiên:</p><pre><code class=\"language-text\">我 喜欢 学习 汉语</code></pre><p>Thông tin tuyến tính chỉ cho biết thứ tự:</p><pre><code class=\"language-text\">A → B → C → D</code></pre><p>Nó chưa trực tiếp biểu diễn:</p><ul><li>đơn vị nào kết hợp với đơn vị nào;</li><li>thành phần nào tạo thành một cấu trúc;</li><li>cấu trúc nào nằm trong cấu trúc lớn hơn;</li><li>quan hệ giữa các thành phần là gì.</li></ul><p>Phân tích vì vậy phải chuyển từ <strong>linear sequence (chuỗi tuyến tính)</strong> sang <strong>hierarchical structure (cấu trúc tầng bậc)</strong>.</p><pre><code class=\"language-text\">Linear Sequence</code></pre><pre><code class=\"language-text\">      ↓</code></pre><pre><code class=\"language-text\">Hierarchical Structure</code></pre><p>Đây là điểm tương đồng cơ bản giữa parsing trong khoa học máy tính và 层次分析 trong phân tích ngữ pháp.</p><h2>2. Lexer và 词法分析: nhận diện đơn vị</h2><p>Trong compiler, Lexical Analysis nhận một chuỗi ký tự và phân chia nó thành các Token.</p><pre><code class=\"language-text\">Characters</code></pre><pre><code class=\"language-text\">    ↓</code></pre><pre><code class=\"language-text\">Lexical Analysis</code></pre><pre><code class=\"language-text\">    ↓</code></pre><pre><code class=\"language-text\">Tokens</code></pre><p>Ví dụ:</p><pre><code class=\"language-text\">value + 10</code></pre><p>có thể được phân tích thành:</p><pre><code class=\"language-text\">IDENTIFIER(\"value\")</code></pre><pre><code class=\"language-text\">PLUS(\"+\")</code></pre><pre><code class=\"language-text\">INTEGER(10)</code></pre><p>Trong phân tích ngôn ngữ tự nhiên, 词法分析 cũng phải xác định các đơn vị từ vựng và thuộc tính của chúng.</p><p>Ví dụ:</p><pre><code class=\"language-text\">我喜欢学习汉语</code></pre><p>có thể được phân chia:</p><pre><code class=\"language-text\">我 / 喜欢 / 学习 / 汉语</code></pre><p>và xác định 词类:</p><pre><code class=\"language-text\">我       代词</code></pre><pre><code class=\"language-text\">喜欢     动词</code></pre><pre><code class=\"language-text\">学习     动词</code></pre><pre><code class=\"language-text\">汉语     名词</code></pre><p>Có thể đối sánh ở mức phương pháp:</p><pre><code class=\"language-text\">Lexical Analysis  ≈  词法分析</code></pre><pre><code class=\"language-text\">Token             ≈  词法单位</code></pre><pre><code class=\"language-text\">Token Category    ≈  词类</code></pre><p>Dấu <code>≈</code> biểu thị sự tương đồng phục vụ phân tích, không biểu thị hai khái niệm hoàn toàn đồng nhất.</p><h2>3. Token và 词类 không xác định toàn bộ cấu trúc</h2><p>Biết loại của từng Token chưa đủ để xác định cấu trúc của chương trình.</p><p>Tương tự, biết 词类 của từng từ chưa đủ để xác định cấu trúc của câu.</p><p>Một chuỗi:</p><pre><code class=\"language-text\">Noun + Verb + Noun</code></pre><p>chỉ mô tả một <strong>Pattern (mẫu cấu trúc)</strong> trên bề mặt.</p><p>Nó chưa tự xác định:</p><pre><code class=\"language-text\">Noun</code></pre><pre><code class=\"language-text\">├── ?</code></pre><pre><code class=\"language-text\">Verb</code></pre><pre><code class=\"language-text\">├── ?</code></pre><pre><code class=\"language-text\">Noun</code></pre><p>cũng chưa xác định quan hệ ngữ nghĩa giữa ba đơn vị.</p><p>Trong ngôn ngữ tự nhiên, cùng một từ còn có thể thuộc nhiều từ loại hoặc có chức năng khác nhau tùy môi trường sử dụng. Việc xác định từ loại vì vậy cũng có thể phụ thuộc vào cấu trúc lớn hơn.</p><p>Phân loại đơn vị là điều kiện cần cho phân tích, nhưng không phải kết quả cuối cùng của phân tích.</p><h2>4. Parser và 句法分析: xác định cấu trúc</h2><p>Trong khoa học máy tính, Parser sử dụng Grammar để xác định cách các Token kết hợp thành cấu trúc.</p><pre><code class=\"language-text\">Tokens</code></pre><pre><code class=\"language-text\">   ↓</code></pre><pre><code class=\"language-text\">Parser</code></pre><pre><code class=\"language-text\">   ↓</code></pre><pre><code class=\"language-text\">Syntactic Structure</code></pre><p>Trong ngôn ngữ học, 句法分析 xác định quan hệ cấu trúc giữa các đơn vị của câu.</p><pre><code class=\"language-text\">词</code></pre><pre><code class=\"language-text\"> ↓</code></pre><pre><code class=\"language-text\">句法分析</code></pre><pre><code class=\"language-text\"> ↓</code></pre><pre><code class=\"language-text\">句法结构</code></pre><p>Có thể đối sánh:</p><pre><code class=\"language-text\">Parser / Parsing  ≈  句法分析</code></pre><p>Điểm chung nằm ở câu hỏi:</p><blockquote>Các đơn vị đang đứng cạnh nhau được tổ chức thành cấu trúc như thế nào?</blockquote><p>Một chuỗi tuyến tính không tự cung cấp câu trả lời cho câu hỏi này. Phân tích cú pháp phải xác định ranh giới và quan hệ giữa các thành phần.</p><h2>5. Parse Tree và 层次分析: biểu diễn quan hệ tầng bậc</h2><p><strong>Parse Tree (cây phân tích cú pháp)</strong> biểu diễn cấu trúc tầng bậc được Parser xác định.</p><p>Trong phân tích ngôn ngữ tự nhiên, 层次分析 cũng phân chia một cấu trúc lớn thành các thành phần trực tiếp, sau đó tiếp tục phân tích các thành phần nhỏ hơn.</p><p>Mô hình tổng quát:</p><pre><code class=\"language-text\">          Structure</code></pre><pre><code class=\"language-text\">          /       \\</code></pre><pre><code class=\"language-text\">      Unit A     Structure</code></pre><pre><code class=\"language-text\">                 /      \\</code></pre><pre><code class=\"language-text\">             Unit B    Unit C</code></pre><p>Điều quan trọng không nằm ở hình dạng của cây, mà ở thông tin mà cây biểu diễn:</p><pre><code class=\"language-text\">A + B + C</code></pre><p>không nhất thiết có cấu trúc:</p><pre><code class=\"language-text\">(A + B) + C</code></pre><p>mà cũng có thể là:</p><pre><code class=\"language-text\">A + (B + C)</code></pre><p>Hai cách phân tầng tạo ra hai cấu trúc khác nhau.</p><p>Có thể đối sánh:</p><pre><code class=\"language-text\">Parse Tree        ≈  层次结构的形式表示</code></pre><pre><code class=\"language-text\">Parsing           ≈  层次关系的识别</code></pre><p>Tuy nhiên, 层次分析 không phải AST của ngôn ngữ tự nhiên. Hai khái niệm chỉ cùng chia sẻ nguyên tắc biểu diễn cấu trúc theo tầng bậc.</p><h2>6. AST và sự trừu tượng hóa cấu trúc</h2><p><strong>Abstract Syntax Tree – AST (cây cú pháp trừu tượng)</strong> giữ lại những quan hệ cấu trúc cần thiết và loại bỏ một phần chi tiết hình thức.</p><p>Ví dụ:</p><pre><code class=\"language-text\">a + b * c</code></pre><p>có thể được biểu diễn:</p><pre><code class=\"language-text\">Add</code></pre><pre><code class=\"language-text\">├── a</code></pre><pre><code class=\"language-text\">└── Multiply</code></pre><pre><code class=\"language-text\">    ├── b</code></pre><pre><code class=\"language-text\">    └── c</code></pre><p>Giá trị của AST nằm ở việc biến một chuỗi tuyến tính thành một mô hình có quan hệ rõ ràng.</p><p>Trong phân tích ngôn ngữ tự nhiên cũng có nhu cầu tương tự. Một câu không chỉ được mô tả bằng thứ tự từ mà còn bằng cấu trúc và quan hệ giữa các thành phần.</p><p>Vì vậy, AST có thể được sử dụng như một <strong>phép đối chiếu về phương pháp biểu diễn</strong>, nhưng không phải một mô hình tương đương hoàn toàn với cấu trúc cú pháp của ngôn ngữ tự nhiên.</p><h2>7. Grammar Rule và 语法规则</h2><p>Trong khoa học máy tính, <strong>Grammar Rule (quy tắc ngữ pháp hình thức)</strong> xác định những cấu trúc mà Parser được phép xây dựng.</p><p>Ví dụ:</p><pre><code class=\"language-text\">Expression → Expression + Expression</code></pre><p>cho phép hai Expression kết hợp thông qua toán tử <code>+</code>.</p><p>Trong ngôn ngữ học, <strong>语法规则 (quy tắc ngữ pháp)</strong> cũng mô tả cách các đơn vị có thể kết hợp và đảm nhiệm chức năng trong cấu trúc lớn hơn.</p><p>Hai loại rule có thể được đối sánh ở chức năng mô hình hóa:</p><pre><code class=\"language-text\">Grammar Rule  ≈  语法规则</code></pre><p>Nhưng nguồn gốc của chúng khác nhau.</p><p>Trong một programming language:</p><pre><code class=\"language-text\">Specification</code></pre><pre><code class=\"language-text\">     ↓</code></pre><pre><code class=\"language-text\">Grammar</code></pre><pre><code class=\"language-text\">     ↓</code></pre><pre><code class=\"language-text\">Valid Structure</code></pre><p>Trong nghiên cứu natural language:</p><pre><code class=\"language-text\">Language Data</code></pre><pre><code class=\"language-text\">     ↓</code></pre><pre><code class=\"language-text\">Observation</code></pre><pre><code class=\"language-text\">     ↓</code></pre><pre><code class=\"language-text\">Generalization</code></pre><pre><code class=\"language-text\">     ↓</code></pre><pre><code class=\"language-text\">Grammatical Description</code></pre><p>Grammar của ngôn ngữ lập trình thường là một bộ phận của specification. Grammar mô tả của ngôn ngữ tự nhiên chủ yếu là mô hình được xây dựng từ dữ liệu ngôn ngữ.</p><h2>8. Pattern không phải Grammar Rule</h2><p><strong>Pattern (mẫu cấu trúc)</strong> là một dạng hình thức có thể quan sát được trong dữ liệu.</p><p>Ví dụ tổng quát:</p><pre><code class=\"language-text\">A + B + C</code></pre><p>chỉ cho biết ba thành phần xuất hiện theo một thứ tự nhất định.</p><p>Nếu nhiều trường hợp có dạng tương tự, người phân tích có thể đặt giả thuyết rằng chúng tuân theo cùng một cấu trúc:</p><pre><code class=\"language-text\">A + [B + C]</code></pre><p>Tuy nhiên, Pattern không tự chứng minh giả thuyết đó.</p><p>Cần phân biệt:</p><pre><code class=\"language-text\">Observed Pattern</code></pre><pre><code class=\"language-text\">       ↓</code></pre><pre><code class=\"language-text\">Structural Hypothesis</code></pre><p>với:</p><pre><code class=\"language-text\">Observed Pattern</code></pre><pre><code class=\"language-text\">       ≠</code></pre><pre><code class=\"language-text\">Proven Structure</code></pre><p>Trong khoa học máy tính, Parser có thể dựa trên một Grammar đã được xác định trước.</p><p>Trong nghiên cứu ngôn ngữ tự nhiên, chính Grammar thường là kết quả cần được mô tả hoặc kiểm chứng từ dữ liệu.</p><p>Đây là một khác biệt phương pháp luận quan trọng giữa hai lĩnh vực.</p><h2>9. Candidate Structure: cấu trúc cần được kiểm tra</h2><p>Từ một Pattern có thể hình thành một hoặc nhiều <strong>Candidate Structure (cấu trúc ứng viên)</strong>.</p><p>Ví dụ một chuỗi:</p><pre><code class=\"language-text\">A B C</code></pre><p>có thể có các Candidate Structure:</p><pre><code class=\"language-text\">[A B] C</code></pre><p>hoặc:</p><pre><code class=\"language-text\">A [B C]</code></pre><p>Thậm chí một số hệ thống phân tích còn có thể đưa ra những quan hệ không thể biểu diễn đầy đủ chỉ bằng hai cách chia trên.</p><p>Do đó:</p><pre><code class=\"language-text\">Surface Pattern</code></pre><pre><code class=\"language-text\">      ↓</code></pre><pre><code class=\"language-text\">Candidate Structures</code></pre><pre><code class=\"language-text\">      ↓</code></pre><pre><code class=\"language-text\">Analysis</code></pre><p>Việc một Candidate Structure có thể được vẽ thành cây chỉ chứng minh rằng <strong>ta đã xây dựng được một mô hình cấu trúc</strong>.</p><p>Nó chưa chứng minh mô hình đó phản ánh đúng các quan hệ trong dữ liệu ngôn ngữ.</p><h2>10. Syntactic Ambiguity và 句法歧义</h2><p><strong>Syntactic Ambiguity (mơ hồ cú pháp)</strong> xuất hiện khi một biểu thức có thể được phân tích thành nhiều cấu trúc cú pháp.</p><p>Trong tiếng Trung, thuật ngữ tương ứng là <strong>句法歧义 (mơ hồ cú pháp)</strong>.</p><p>Mô hình tổng quát:</p><pre><code class=\"language-text\">Input</code></pre><pre><code class=\"language-text\"> ├── Parse A</code></pre><pre><code class=\"language-text\"> └── Parse B</code></pre><p>Hai cách parse có thể sử dụng cùng:</p><ul><li>từ;</li><li>thứ tự từ;</li><li>từ loại;</li></ul><p>nhưng tạo ra các quan hệ cấu trúc khác nhau.</p><p>Do đó:</p><pre><code class=\"language-text\">Same Tokens</code></pre><pre><code class=\"language-text\">    ≠</code></pre><pre><code class=\"language-text\">Same Structure</code></pre><p>và:</p><pre><code class=\"language-text\">Same Surface Pattern</code></pre><pre><code class=\"language-text\">    ≠</code></pre><pre><code class=\"language-text\">Unique Analysis</code></pre><p>层次分析 có vai trò xác định các khả năng cấu trúc này. Tuy nhiên, cấu trúc cú pháp chưa phải tầng cuối cùng của quá trình phân tích.</p><h2>11. Semantic Analysis và 语义分析</h2><p>Trong compiler, Semantic Analysis kiểm tra các điều kiện mà Parser không thể xác nhận chỉ bằng cấu trúc cú pháp.</p><p>Ví dụ:</p><pre><code class=\"language-text\">\"hello\" - 5</code></pre><p>có thể tạo được cấu trúc:</p><pre><code class=\"language-text\">Subtract</code></pre><pre><code class=\"language-text\">├── String</code></pre><pre><code class=\"language-text\">└── Integer</code></pre><p>nhưng vẫn bị bác bỏ nếu toán tử <code>-</code> không được định nghĩa cho <code>String</code>.</p><p>Trong ngôn ngữ học, <strong>语义分析 (phân tích ngữ nghĩa)</strong> cũng kiểm tra thông tin mà cấu trúc hình thức đơn thuần chưa thể biểu đạt đầy đủ.</p><p>Một phân tích cú pháp phải được đối chiếu với các câu hỏi như:</p><ul><li>thành phần nào mô tả thành phần nào;</li><li>hành động liên hệ với đối tượng nào;</li><li>thuộc tính được gán cho thực thể nào;</li><li>các thành phần có tương thích về nghĩa hay không;</li><li>cách phân tầng có bảo toàn cách hiểu của câu hay không.</li></ul><p>Có thể đối sánh ở mức phương pháp:</p><pre><code class=\"language-text\">Semantic Analysis  ≈  语义关系与语义限制的分析</code></pre><h2>12. Semantic Relations và 语义关系</h2><p><strong>Semantic Relations (quan hệ ngữ nghĩa)</strong> mô tả quan hệ về nghĩa giữa các thành phần trong một cấu trúc. Trong tiếng Trung có thể gọi là <strong>语义关系 (quan hệ ngữ nghĩa)</strong>.</p><p>Một cấu trúc cú pháp không chỉ cần xác định:</p><pre><code class=\"language-text\">A kết hợp với B</code></pre><p>mà còn cần giải thích:</p><pre><code class=\"language-text\">A có quan hệ gì với B?</code></pre><p>Hai cây có hình thức hợp lệ có thể biểu diễn hai quan hệ khác nhau.</p><p>Vì vậy, phân tích ngữ pháp không chỉ là bài toán:</p><pre><code class=\"language-text\">Words</code></pre><pre><code class=\"language-text\">  ↓</code></pre><pre><code class=\"language-text\">Tree</code></pre><p>mà còn bao gồm:</p><pre><code class=\"language-text\">Words</code></pre><pre><code class=\"language-text\">  ↓</code></pre><pre><code class=\"language-text\">Structure</code></pre><pre><code class=\"language-text\">  ↓</code></pre><pre><code class=\"language-text\">Relations</code></pre><p>Cây là phương tiện biểu diễn cấu trúc, không phải bằng chứng độc lập cho tính đúng đắn của cấu trúc đó.</p><h2>13. Semantic Constraints và 语义限制</h2><p>Trong khoa học máy tính, một node có thể đứng ở vị trí hợp lệ về syntax nhưng không đáp ứng semantic constraint.</p><p>Ví dụ:</p><pre><code class=\"language-text\">Subtract</code></pre><pre><code class=\"language-text\">├── String</code></pre><pre><code class=\"language-text\">└── Integer</code></pre><p>có hình dạng cú pháp hợp lệ nhưng có thể vi phạm yêu cầu về type.</p><p>Trong ngôn ngữ tự nhiên cũng tồn tại <strong>语义限制 (ràng buộc ngữ nghĩa)</strong> đối với sự kết hợp giữa các thành phần.</p><p>Một Predicate có thể yêu cầu đối tượng mà nó mô tả phải có một số đặc tính ngữ nghĩa nhất định. Một Verb cũng có thể đặt điều kiện đối với các thành phần tham gia vào quan hệ mà nó biểu thị.</p><p>Có thể mô hình hóa:</p><pre><code class=\"language-text\">Syntactic Position</code></pre><pre><code class=\"language-text\">        ↓</code></pre><pre><code class=\"language-text\">Semantic Requirement</code></pre><pre><code class=\"language-text\">        ↓</code></pre><pre><code class=\"language-text\">Compatible / Incompatible</code></pre><p>Phép đối sánh này không có nghĩa semantic constraint của compiler và 语义限制 của natural language là cùng một cơ chế. Điểm chung nằm ở nguyên tắc:</p><blockquote><strong>Khả năng xuất hiện trong một cấu trúc hình thức không tự động bảo đảm tính tương thích về ngữ nghĩa.</strong></blockquote><h2>14. Vì sao Pattern không đủ để xác nhận một phân tích?</h2><p>Pattern chỉ cung cấp bằng chứng về hình thức.</p><p>Giả sử quan sát được:</p><pre><code class=\"language-text\">A + B + C</code></pre><p>Một cách phân tích đề xuất:</p><pre><code class=\"language-text\">A + [B + C]</code></pre><p>Để chấp nhận cấu trúc này, ít nhất phải xác định được:</p><pre><code class=\"language-text\">1. B và C có tạo thành một constituent hay không?</code></pre><pre><code class=\"language-text\">2. Rule nào cho phép cấu trúc đó?</code></pre><pre><code class=\"language-text\">3. B và C có quan hệ cú pháp gì?</code></pre><pre><code class=\"language-text\">4. B và C có quan hệ ngữ nghĩa gì?</code></pre><pre><code class=\"language-text\">5. Cấu trúc này có bảo toàn interpretation của toàn biểu thức hay không?</code></pre><p>Do đó:</p><pre><code class=\"language-text\">Pattern Match</code></pre><pre><code class=\"language-text\">     ↓</code></pre><pre><code class=\"language-text\">Candidate Structure</code></pre><pre><code class=\"language-text\">     ↓</code></pre><pre><code class=\"language-text\">Syntactic Analysis</code></pre><pre><code class=\"language-text\">     ↓</code></pre><pre><code class=\"language-text\">Semantic Analysis</code></pre><p>khác với:</p><pre><code class=\"language-text\">Pattern Match</code></pre><pre><code class=\"language-text\">     ↓</code></pre><pre><code class=\"language-text\">Conclusion</code></pre><p>Một nhãn ngữ pháp cũng không thể tự chứng minh cấu trúc mà nhãn đó giả định. Cấu trúc phải được xác lập bằng quan hệ giữa các thành phần.</p><h2>15. Pattern + Structure + Semantics</h2><p>Một mô hình phân tích đầy đủ hơn có thể biểu diễn:</p><pre><code class=\"language-text\">Form</code></pre><pre><code class=\"language-text\"> ↓</code></pre><pre><code class=\"language-text\">Pattern</code></pre><pre><code class=\"language-text\"> ↓</code></pre><pre><code class=\"language-text\">Candidate Structure</code></pre><pre><code class=\"language-text\"> ↓</code></pre><pre><code class=\"language-text\">Syntactic Relations</code></pre><pre><code class=\"language-text\"> ↓</code></pre><pre><code class=\"language-text\">Semantic Relations</code></pre><pre><code class=\"language-text\"> ↓</code></pre><pre><code class=\"language-text\">Interpretation</code></pre><p>Mỗi tầng trả lời một câu hỏi khác nhau.</p><p><strong>Form (hình thức)</strong>:</p><blockquote>Những đơn vị nào xuất hiện?</blockquote><p><strong>Pattern (mẫu cấu trúc)</strong>:</p><blockquote>Chúng có hình thức phân bố như thế nào?</blockquote><p><strong>Structure (cấu trúc)</strong>:</p><blockquote>Chúng được tổ chức theo tầng bậc nào?</blockquote><p><strong>Syntactic Relations (quan hệ cú pháp)</strong>:</p><blockquote>Các thành phần có chức năng và quan hệ cú pháp gì?</blockquote><p><strong>Semantic Relations</strong>:</p><blockquote>Các thành phần liên hệ với nhau về nghĩa như thế nào?</blockquote><p><strong>Interpretation (cách hiểu)</strong>:</p><blockquote>Toàn bộ cấu trúc được hiểu như thế nào trong ngữ cảnh?</blockquote><p>Không tầng nào có thể được suy ra hoàn toàn chỉ từ tên gọi của tầng trước.</p><h2>16. Bảng đối sánh</h2><p>Các khái niệm chính có thể được tổng hợp như sau:</p><p>| Khoa học máy tính | Phân tích ngôn ngữ | Điểm đối sánh |</p><p>|---|---|---|</p><p>| Source Code (mã nguồn) | 语言材料 (ngữ liệu) | Dữ liệu đầu vào |</p><p>| Lexical Analysis (phân tích từ vựng) | 词法分析 (phân tích từ vựng) | Nhận diện đơn vị |</p><p>| Token (đơn vị từ vựng) | 词 / 词法单位 (từ / đơn vị từ vựng) | Đơn vị được phân tích |</p><p>| Token Category (loại token) | 词类 (từ loại) | Phân loại đơn vị |</p><p>| Parser (bộ phân tích cú pháp) | 句法分析 (phân tích cú pháp) | Xác định cấu trúc |</p><p>| Parse Tree (cây phân tích cú pháp) | 层次结构 (cấu trúc tầng bậc) | Biểu diễn quan hệ tầng bậc |</p><p>| AST (cây cú pháp trừu tượng) | Mô hình cấu trúc trừu tượng | Lược bỏ chi tiết không cần thiết |</p><p>| Grammar Rule (quy tắc ngữ pháp hình thức) | 语法规则 (quy tắc ngữ pháp) | Mô tả khả năng kết hợp |</p><p>| Syntactic Ambiguity (mơ hồ cú pháp) | 句法歧义 (mơ hồ cú pháp) | Nhiều cấu trúc cho cùng biểu thức |</p><p>| Semantic Analysis (phân tích ngữ nghĩa) | 语义分析 (phân tích ngữ nghĩa) | Kiểm tra quan hệ về nghĩa |</p><p>| Semantic Constraint (ràng buộc ngữ nghĩa) | 语义限制 (ràng buộc ngữ nghĩa) | Điều kiện đối với sự kết hợp |</p><p>Các cặp trong bảng là <strong>đối sánh phương pháp</strong>, không phải định nghĩa tương đương.</p><h2>17. Giới hạn của phép đối sánh</h2><p>Programming language là hệ thống được thiết kế. Natural language là hệ thống hình thành và biến đổi trong quá trình sử dụng của cộng đồng ngôn ngữ.</p><p>Compiler thường có thể hỏi:</p><pre><code class=\"language-text\">Cấu trúc này có phù hợp với specification không?</code></pre><p>Ngôn ngữ học thường phải hỏi:</p><pre><code class=\"language-text\">Dữ liệu này cho thấy hệ thống đang vận hành như thế nào?</code></pre><p>Vì vậy, trong khoa học máy tính:</p><pre><code class=\"language-text\">Grammar</code></pre><pre><code class=\"language-text\">   ↓</code></pre><pre><code class=\"language-text\">Parser</code></pre><pre><code class=\"language-text\">   ↓</code></pre><pre><code class=\"language-text\">Accepted / Rejected</code></pre><p>Trong nghiên cứu ngôn ngữ tự nhiên, quan hệ thường phức tạp hơn:</p><pre><code class=\"language-text\">Data</code></pre><pre><code class=\"language-text\"> ↓</code></pre><pre><code class=\"language-text\">Possible Analysis</code></pre><pre><code class=\"language-text\"> ↓</code></pre><pre><code class=\"language-text\">Comparison</code></pre><pre><code class=\"language-text\"> ↓</code></pre><pre><code class=\"language-text\">Generalization</code></pre><pre><code class=\"language-text\"> ↓</code></pre><pre><code class=\"language-text\">Grammatical Model</code></pre><p>Ngữ pháp mô tả không phải mã nguồn của ngôn ngữ tự nhiên. Nó là mô hình được xây dựng để giải thích dữ liệu ngôn ngữ.</p><p>Phép đối sánh với compiler có giá trị ở <strong>phương pháp phân tầng vấn đề</strong>, không phải ở việc đồng nhất hai hệ thống.</p><h2>18. Tổng kết: Form → Pattern → Structure → Semantics</h2><p>Phân tích một biểu thức không kết thúc ở việc nhận ra một Pattern.</p><p>Mô hình tổng quát là:</p><pre><code class=\"language-text\">Form</code></pre><pre><code class=\"language-text\">  ↓</code></pre><pre><code class=\"language-text\">Pattern</code></pre><pre><code class=\"language-text\">  ↓</code></pre><pre><code class=\"language-text\">Candidate Structure</code></pre><pre><code class=\"language-text\">  ↓</code></pre><pre><code class=\"language-text\">Syntactic Relations</code></pre><pre><code class=\"language-text\">  ↓</code></pre><pre><code class=\"language-text\">Semantic Relations</code></pre><pre><code class=\"language-text\">  ↓</code></pre><pre><code class=\"language-text\">Interpretation</code></pre><p>Từ góc nhìn này, có thể thiết lập ba nguyên tắc:</p><pre><code class=\"language-text\">Pattern ≠ Structure</code></pre><pre><code class=\"language-text\">Structure ≠ Semantic Validity</code></pre><pre><code class=\"language-text\">Possible Analysis ≠ Established Analysis</code></pre><p>Một Pattern cung cấp cơ sở để đề xuất cấu trúc. Cấu trúc phải được kiểm tra bằng quan hệ cú pháp. Quan hệ cú pháp tiếp tục phải được đối chiếu với quan hệ và ràng buộc ngữ nghĩa.</p><p>Đây là điểm giao nhau quan trọng nhất giữa phương pháp phân tích của compiler và phương pháp phân tích ngữ pháp tự nhiên.</p><p>Bài tiếp theo sẽ áp dụng khung phân tích này vào một vấn đề cụ thể của ngữ pháp tiếng Hán: <strong>主谓谓语句 (câu có vị ngữ chủ-vị)</strong> — cách xác định cấu trúc, phạm vi của thuật ngữ và những cách phân tích khác nhau trong nghiên cứu ngữ pháp hiện đại.</p>","tags":["Khoa học","Ngôn ngữ","Thuật toán"],"author":"virgoricomp_102605","publishedAt":"2026-09-27T20:43:22.516Z","updatedAt":"2026-09-27T23:42:28.951Z","published_at":"2026-09-27T20:43:22.516Z","updated_at":"2026-09-27T23:42:28.951Z","view_count":4,"canonical":"https://wiki.quizzman.com/wiki/tu-parser-den-doi-sanh-phan-tich-ngu-phap-tu-nhien-va-khoa-hoc-may-tinh","url":"https://wiki.quizzman.com/wiki/tu-parser-den-doi-sanh-phan-tich-ngu-phap-tu-nhien-va-khoa-hoc-may-tinh","markdownUrl":"https://wiki.quizzman.com/api/articles/tu-parser-den-doi-sanh-phan-tich-ngu-phap-tu-nhien-va-khoa-hoc-may-tinh.md","apiUrl":"https://wiki.quizzman.com/api/articles/tu-parser-den-doi-sanh-phan-tich-ngu-phap-tu-nhien-va-khoa-hoc-may-tinh"}