簡體   English   中英

C語言中的上下文無關文法

[英]Context-free grammar in C

我分配了一個程序,用C編寫一個程序,該程序使用以下上下文無關的語法顯示許多(n <50)個有效的上下文無關的語法字符串:

S -> AA|0
A -> SS|1

我幾乎沒有關於如何執行此操作的概念,但是在對它們進行越來越多的分析之后,它們都不對。

目前,我正計划制作一個數組,並隨機更改[..., S, S, ...][..., 1, ...] [..., A, ...] [..., 1, ...]直到只有0和1,然后檢查是否已經隨機生成了相同的事物。

我仍然不確定這是否是正確的方法,而且我仍然不確切地知道該怎么做或在哪里保留最終用語,因為基本形式將是不同長度的字符數組。 另外,在C中,二維字符數組等於字符串數組嗎?

這有任何意義嗎,這是正確的方法嗎? 還是我錯過了什么?

您可以在每次需要決定某件事時簡單地做出隨機決定。 例如:

function A():
  if (50% random chance)
    return "1"
  else
    return concat(S(), S())

function S():
  if (50% random chance)
    return "0"
  else
    return concat(A(), A())

多次調用S()給我這些輸出:

"0"
"00110110100100101111010111111111001111101011100100011000000110101110000110101110
 10001000110001111100011000101011000001101111000110110011101010111111111011010011
 10000000101111100100011011010000000101000111110010001000101001100110100111111111
 1001010011"
"11"
"10010010101111010111101"

語法的所有有效字符串。 請注意,您可能需要調整一些隨機機會。 該樣本極有可能生成非常小的字符串,如"11"

嘗試將無上下文語法視為一組規則,使您可以使用某種語言生成新的字符串。 例如,第一個規則:

S -> AA | 0

您如何用這種語言生成單詞S? 一種方法是使用隨機生成字符串“ 0”或兩個串聯的A字的函數。

同樣,要實施第二條規則:

A -> SS | 1

編寫一個函數,該函數隨機生成“ 1”或兩個串聯的S字。

你問了幾個問題...
關於問題: C中的BTW,二維字符數組等於字符串數組嗎?

是。

以下是聲明字符串數組的方法,每個示例在用法方面都顯示出不同的靈活性:

char **ArrayOfStrings;  //most flexible declaration - 
                        //pointer to pointer, can use `calloc()` or `malloc()` to create memory for
                        //any number of strings of any length (all strings will have same length) 

要么

char *ArrayOfStrings[10]; //somewhat flexible - 
                          //pointer to array of 10 strings, again can use  `c(m)alloc()` to allocate memory for 
                          //each string to have any lenth (all strings will have same length)

要么

ArrayOfStrings[5][10]; //Not flexible - (but still very useful)
                       //2 dimensional array of 5 strings, each with space for up to 9 chars + '\0' 
                       //Note:  In C, by definition, strings must always be NULL terminated.

注意:盡管這些形式中的每一個都是有效的,並且在正確使用時非常有用,但最好注意每種形式在實踐中的行為會有差異 (請閱讀鏈接以獲取有關此內容的精彩討論)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM