簡體   English   中英

在嵌入式 C++ 中使用運算符作為預定義變量評估字符串格式的邏輯表達式

[英]Evaluating Logical expression in string format with operators as predefined variables in Embedded C++

  • 在我的 C++ 嵌入式程序中,我有某些預定義的變量,例如 int Var_A、Var_B、Var_C、Var_D....
  • 我必須在外部文本文件中定義邏輯表達式(因為邏輯表達式可以在稱為配置文件的外部文本文件中配置),稍后在微控制器的文件系統中讀取該文件。
  • 配置文件中的變量與嵌入式程序中的變量相同。
  • 該文件包含以下預定義格式的邏輯表達式,

(Operand 1) (Operator) (Operator 2)

示例: Var_A AND Var_B

  • 變量在運行時確實會發生變化(在嵌入式程序中)。
  • 后來這個邏輯表達式的結果被用來執行某些子程序。
  • 我們不能將中斷用於相同的操作,因為我們有 100 個這樣的變量。

我想用interpreter來解決這個問題,但是我對interpreter不太熟悉,只是聽說這種情況下可以使用interpreter。

請提出相同的邏輯解決方案。

您的解決方案將是編寫一個掃描器和解析器來構建一棵樹。

獲得想法的最佳解決方案是使用FlexYacc進行一些測試。 這些工具允許您進行掃描 (Flex) 並將掃描的字符串轉換為解析器 (Yacc) 可以使用上下文無關語法 (CFG) 將其轉換為對方程進行編碼的節點樹。 (這與編譯器的完成方式非常相似)

如果您的輸入是這樣的,這允許您執行以下操作:

var1 + var2

您掃描此字符串以查找令牌,它們是: var1<variable> +<operator> var2<variable>

您將這些標記轉換為樹的節點:

    node #1
    op: +
    operatorType: enumvalue for +
       |               |
      |                 |
     |                   |
    \/                   \/
node #2                node# #3
name: var1             name: var2
type: var              type: var

您現在可以遍歷樹並使用樹中對象的成員來確定它是什么以及如何使用它。

現在棘手的部分是你將如何在受限的嵌入式設備中實現它。 如果您的設備有足夠的 RAM 來包含足夠大的用於此樹結構的數據緩沖區,則可以做到這一點。 我的解決方案是為我的樹 object 節點分配一個緩沖區,並為變量名稱分配一個緩沖區,這將允許在沒有碎片的情況下使用 static 數量的 memory。

暫無
暫無

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

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